DDD初理解
程序员文章站
2022-07-05 23:23:19
...
DDD,领域驱动,强调领域对象的设计,更加符合面向对象的理念和标准。
相对而言,传统开发方式可以称为数据驱动,强调表结构设计合理性。
举粟子:
1、这是常见的设计,也称贫血模型(充血模型对应,读者可以自行搜索区别和定义)
public class Dog {
private int age;
private String color;
private String status;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public class DogService {
public void eat(Dog dog, Object food) {
dog.setStatus("吃");
System.out.println(dog.toString() + food.toString());
}
public void rest(Dog dog) {
dog.setStatus("睡觉");
System.out.println(dog.toString() + " 睡觉觉...");
}
public Dog getDog(){
return new Dog();
}
}
2、这是DDD的设计,也称充血模型
public class Dog {
private int age;
private String color;
public int getAge() {
return age;
}
public void eat(Object food) {
System.out.println("吃...");
}
public void rest() {
System.out.println("睡...");
}
}
可以明显看出区别。DDD轻service,重entity和domain。
我们有一个购买请求,就要判断商品是否能购买。这个就是业务逻辑。传统设计中这个逻辑会实现在service中,通过请求数据库查看库存等运作实现业务逻辑,从而判断能否购买。
问题:另一个请求也需要判断能否购买,则要重复开发这段业务代码。
解决方案:
1、工具类:传入商品对象,返回能否购买的结果,封装内部业务逻辑实现
2、充血模型:把业务逻辑放在商品中。product.canBeOrdered()
其中2就是DDD是的方案。
上一篇: druid查询技巧(持续更新)
下一篇: Redis 初解