利用封装和继承,进一步提高了代码质量。可以通过两个层面来提高封装性。
第一个层面是 API 的封装。
对外暴露出每个 API 必须的参数,从而缩小了接口,提高了封装性。
第二个层面是领域对象的封装。
分析了哪些属性是不需要修改的,把这些属性变成只读的,从而缩小了对象的接口。 另一方面,我们用表意接口封装了状态属性,使外界不需要直接关心状态转换的细节,同时消除了特性依恋的坏味道。
另外,我们还可以利用继承减少代码的重复。
这里没有唯一正确的方式,重要的是根据实际情况进行权衡。
编程风格回顾
第一,领域对象不访问数据库。目的是使领域对象和数据库解耦,便于维护和测试。
第二,领域服务只能读数据库。在实现一些业务规则时,需要访问数据库中的数据,因此领域服务需要读数据库
第三,应用服务可以读写数据库。比如更新一个对象前,要把这个对象先从数据库中读出来;创建或修改对象后,要存回数据库,这些本身都没有领域逻辑。
第四,用 ID 表示对象之间的关联。
第五,领域对象有自己的领域服务。
第六,在以上前提下利用封装和继承。
极客时间《手把手教你落地DDD》第12课学习笔记 Day12