gpt4 book ai didi

design-patterns - 贫血域模型是否意味着您不能将实用程序/支持类用作域模型的 "helpers"?

转载 作者:行者123 更新时间:2023-12-04 07:19:36 24 4
gpt4 key购买 nike

根据 this definition , Fowler 的贫血领域模型概念是:

a software domain model where the business logic is implemented outside the domain objects





With this pattern, logic is typically implemented in separate classes which transform the state of the domain objects. Fowler calls such external classes transaction scripts.



如果我们以购物车为例,Cart 对象将是域对象。但是将购物车处理到最终订单和收货涉及检查订单库存和处理信用卡付款。很多这些东西都需要实用程序类,因为在 Cart 对象中做任何事情都意味着 Cart 类会很大而且很麻烦。那么,这是否意味着本示例中的 Cart 将是一个贫血领域模型,而这些实用程序类将是根据上述定义的“事务脚本”?

最佳答案

领域驱动设计的一个关键概念是创建一个丰富的设计,传达和反射(reflect)领域专家(业务用户)的行话。然后,您希望您的代码成为该领域模型的表达。 (参见 DDD Patterns summaries 中的“无处不在的语言”和“模型驱动设计”)。

执行此操作时,您将为实体(类)创建名称,以反射(reflect)业务用户如何描述它们。此外,您将在那些也反射(reflect)域的类上创建方法。

考虑到这一点,考虑您如何看待“助手”或“实用程序”类可能会有所帮助。使用您的一些描述,您可能有类和方法,例如:

product = GetProduct(data.productId);
shoppingCart.add(product);
receipt = customer.Purchase(shoppingCart);

您的 Customer.Purchase 方法可能会执行以下操作:
creditCard = this.getCreditCart(creditCardNumber);
purchaseNumber = creditCard.Charge(shoppingCart.Total);

我意识到这些例子并不完整,甚至不完全准确,但我希望这个想法有帮助。

回答您最初的问题——是的,有实用程序和支持类是可以的。但是,您希望创建这些支持类并将它们映射到真实的域实体。在与您的用户合作之后,您可能能够创建比事务脚本实体更多的有意义的域实体。

希望这可以帮助。祝你好运!

关于design-patterns - 贫血域模型是否意味着您不能将实用程序/支持类用作域模型的 "helpers"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1320184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com