ddd的战术篇: Factory和Specification

本文探讨了领域驱动设计(DDD)中的Factory和Specification模式。Factory模式用于确保数据完整性,防止出现不符合业务逻辑的状态,例如在创建实体时进行复杂的验证。Specification模式解决了复杂查询的需求,抽象查询条件,降低了领域层与数据存储实现的耦合,增强了代码的可扩展性。
摘要由CSDN通过智能技术生成

之前的文章中讲到了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
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值