关联
模型关联越少越好
简化关联
1.规定一个遍历方向
2.添加限定符(如一个国家有过很多总统,但每个时期只有一个,时期就是限定符)
3.消除不必要的关联
实体
实体具有生命周期,在生命周期内可跟踪
简单的讲,如果我们要追踪一个物体,那么他就是一个实体,实体的信息不一定要保存在数据库中,例如:
站点图片,我们要时刻掌握站点图片的信息,在以便在业务中对站点图片进行操作,这时站点图片就是实体,而这个实体的标识是完全路径名,图片的信息(如图片的大小)我们可以利用IO函数从图片中获取
值对象
值对象没有标识,无生命周期,生成后不可变
值对象可引用实体
值对象可被实体引用,只能替换,不能修改
值对象常被用作参数才对象之间传输
将实体的多个属性封装为值对象的前提是,这些属性是不可修改的,而且需要一起生成
应尽量清楚值对象之间的双向关联,如果必须这么关联,那有没有可能将其中一个实体误认为是值对象
领域服务
领域服务经常以 动词 命名,如FundsTransfer(资金转账)
如果有一个动作,会在很多地方调用,且将它应用到其他领域对象中都不合适,那么它可能是一个领域服务
有些领域服务会以Manager结尾,如LoginManager
服务操作是无状态的,即一定的输入就会有一定的输出
一般的领域服务基类声明如下
LoginManagerBase<TUser, TRole> where TUser:User, TRole:Role
{
}
这样做的好处是可以方便对登录这个领域服务进行扩展
关于应用服务和领域服务
应用服务职责:
1.处理输入输出
2.调用领域层(不组织领域逻辑)
3.调用基础设施层
领域服务职责:
1.组织领域逻辑
问:怎样是组织领域逻辑
答:一些领域动作要一起调用才能完成这次请求,如
不是组织
If(a!=null){
Class1.action1()
}
If(b!=null){
Class2.action2()
}
是组织(所以if里的逻辑应该在领域层)
If(a!=null){
Class1.action1()
Class2.action2()
}