欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

ddd战略解析:Factory与Specification的角色深度探讨

最编程 2024-02-11 09:37:50
...

之前的文章中讲到了entity, value object, repository等domain object。这次终于能将一些相对比较轻松的话题了

Factory

这个设计模式中应该有一个叫工厂模式,ddd可能也是借鉴了它。
ddd比较注重数据的完整性。
有关数据完整性,百度了一下,结果

存储在数据库中的所有数据值均正确的状态

复习一下,ddd中有aggregate(集合)这个概念,集合中的entity, value有一定的必须保持恒定不变的状态。而ddd中的数据完整性指的就是这中概念。
比如有一个aggregate叫Person。其中有两条腿Leg(ValueObject)

public class Person {
   
  List<Leg> legs;
}

那数据完整性观点来讲,无论我们调用什么方法,绝对不能出现下面这种情况

legs.size() != 2

另外ddd提倡充血模式。所以比如说我们创建一个entity的类之后,不会再调用一大堆setter来初始化。entity被创建了,它的状态时必须是符合业务逻辑要求,而不是需要进一步加工的。听起来很绕口。来说个实际例子吧。
比如我们要做一个购物网站,需要一个商品的类。Commodity。下面的贫血模型是ddd所反对的。

@Setter
@Getter
public class Commodity{
   

  private CommodityId id;
  private Category category;
  private String commodityName;
  private String description;
  private Date dateCreated;
  private Double price;

  ...

}

所以一般情况,自然我们必须在构造方法中对类进行初始化(原本很自然而然的做法,构造方法当然是来构造类的,但因为贫血模型的流行,用含参数的构造方法构造完整的类反而变成了非主流。)

public class Commodity{
   

  private CommodityId id;
  private Category category;
  private S