2009-07-02 66 views
6

我现在正在阅读http://en.wikipedia.org/wiki/Domain-driven_design,我只需要2个快速示例,所以我明白'价值对象'和'服务'是在DDD。域驱动设计新手,请简单解释'价值对象'和'服务'

  • 值对象:描述事物特征的对象。值对象没有概念标识。它们通常是只读对象,可以使用Flyweight设计模式共享。

  • 服务:当操作不属于概念对任何对象。遵循问题的自然轮廓,您可以在服务中实施这些操作。服务理念在GRASP中被称为“纯粹加工”。

Value objexts:有人可以给我一个简单的例子吗?

服务:所以如果它不是一个对象/实体,也不属于库/工厂那么它的服务?我不明白这一点。

回答

7

值对象的原型例子就是金钱。可以想象,如果你建立一个国际电子商务应用程序,你会想把'钱'的概念封装到一个类中。这将允许您对货币价值进行操作 - 不仅基本的加减乘除等,但美元之间也可能货币转换,并说,欧元。

这样一个Money对象没有固有的标识 - 它包含了你放入它的值,当你处理它时,它就消失了。此外,包含10美元的两个Money对象即使是单独的对象实例也被视为相同。

值对象的其他示例是诸如长度之类的度量,其可能包含值和单位,例如9.87公里或3英尺。再次,除了简单地包含数据之外,这种类型可能会提供转换方法到其他测量等等。

另一方面,服务是执行重要域操作的类型,但并不真正适合其他更多基于“名词”的域概念。您应尽量争取尽可能少的服务,但有时,服务是封装重要域概念的最佳方式。

您可以在优秀的图书Domain-Driven Design中阅读更多关于Value Objects,Services和更多内容的信息,我只能推荐。

3

值对象:一个典型的例子是地址。平等是基于对象的价值,因此是名称,而不是身份。这意味着,例如2个人对象具有相同的地址,如果它们的地址对象的值是相等的,即使在地址对象在存储器2个中完全不同的对象,或在数据库中的不同的主键。

服务:提供的行为不一定属于特定的域对象,但对域对象起作用。举个例子,我想到一种服务,当产品的价格低于一定价格时,它会在网上商店发送电子邮件通知。

相关的对国内长途免费的书(埃里克·埃文斯书的摘要):http://www.infoq.com/minibooks/domain-driven-design-quickly