领域模型的行为设计是面向对象领域建模设计的重要部分。
在没有设计的朴素的情况下,领域模型一般是一个数据对象(DTO等),其中只有setter/getter方法,是一种纯粹的数据结构,然后将很多数据结构的算法操作设计在Service等专门接口类中。这样,数据对象作为服务接口方法的参数传入,在服务的方法中被加工。如下代码:
//失血模型 贫血模型
public class A{
private int id;
...//只有setId(int id) 和getId()方法
}
public class AServiceImp implements AService{
//失血模型作为方法参数传入,被操作
public void createA(A a){
...
}
}
而DDD领域驱动设计告知我们要注重领域模型的业务方法设计,领域模型=数据结构+操作方法,才是一个完整的真正对象,也才能够真正发挥对象封装的作用。
但是一个模型对象可能有很多方法,哪些方法应该作为对象本身的方法?哪些方法又应该依赖其他对象进行?举例:
public class A{
//对象本身独立行为
public void thisIsMyMethod(){
....
}
//依赖其他对象的交互行为
public void replyOthers(B b){
b.xxxx();
..
}
}