Answers:
这取决于您想要的体系结构类型。
这意味着Order
拥有一个属性(或方法),该属性(或方法)将基于返回返回订单的总价OrderLines
。该Order
也将有一个方法AddOrderItem(Product product, int amount)
和Order
将检查是否已经是一个存在OrderLine
于该特定产品。
在这种模型中,您还将拥有不是真实实体的对象,例如Repository
用于访问数据或Factory
用于创建实体的对象。这些称为域服务。应用层负责调用域服务(例如,从数据库中检索实体),然后它将在该实体上执行功能。所述Application Layer
应尽可能地薄。
这是一篇有关DDD的不错的文章,其中详细介绍了这些概念。
Order
价格和检查重复项OrderLines
。对于Anemic域模型是否是一件坏事,存在不同的意见。我个人更喜欢真实的域模型。
本文介绍了贫血域模型和非贫血域模型之间的区别。
Order
类中?
好吧,实体和业务对象在大多数情况下几乎是相同的。例如,如果您有一个产品类,并且想要公开一个属性,该属性将使用产品类中的某些现有属性并进行一些计算,然后将其公开。用这个术语说,创建该属性的逻辑仍然在类中是很好的。
现在,问题可能出在哪里,以适合您的业务层类。我更喜欢使用具有一些逻辑来处理业务问题的业务层类。例如,在您的“产品”示例中,业务问题可能是使用第三方供应商(如Paypal)向您收取费用。
要记住的关键一件事是,实体始终具有标识,而业务对象是没有标识的实体。例如,产品是一个实体,但是金钱没有身份。1000个不同的货币实例将是相同的。