其中需要注意的是Entity中的ID其实就是对DelegateIdentifier.Identity的引用,也就是仅仅为了做一个Public的公开。另外AloneStorableValueObject与ValueObject唯一不同是其需要持久化并独占一个数据表,而ValueObject是不需要持久化或者跟着所属的聚合根持久化的。然后我们的IRepository<T>变成下面这样约束:
public interface IRepository<T> where T : DelegateIdentifier, IAloneStorable { string NextIdentity(); void Save(T aggregate); T GetByIdentity(string identity); }
这样只有继承了AggregateRoot和AloneStorableValueObject可以有自己的Repository了。
六、结语
从业务角度来说设计就是不断的梳理业务再抽象建模的过程,不是一蹴而就,也没有一招打遍天下的方式。需要不断的演进、找到最适合的设计方式。从更泛角度来说设计也是约束、定义规则的过程,一套清晰的规则可以为整个项目的所有开发者往共同的目标前进起到事半功倍的效果。
本文的源码地址:https://github.com/ZacharyFan/DDDDemo/tree/Demo9。
作者:Zachary_Fan
出处: