欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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是的方案。

相关标签: DDD