什么是充血模型与贫血模型?

目录

一、充血模型

二、贫血模型

三、优缺点及适用场景


一、充血模型

充血模型(Domain Driven Design)是一种面向对象的软件设计方法,它强调将业务逻辑封装在领域对象中。

假设有一个电商网站,需要对商品进行购买、库存管理等操作。在充血模型中,我们可以定义一个 Product 类来表示商品。Product 类会包含商品的属性(例如名称、价格、库存等),并且也会包含一些行为(例如购买商品、更新库存等)。这些行为是直接封装在 Product 类中的,以便于对商品进行操作。

public class Product{
    private String productName;
    private BigDecimal price;
    private Long stock;

    public void purchase(int quantity) {
        if (quantity > stock) {
            throw new IllegalArgumentException("Not enough stock available");
        }
        stock -= quantity;
    }
}

二、贫血模型

贫血模型(Anemic Domain Model)则是一种将数据与行为分离的模型,其中数据由对象持有,而行为则由外部服务提供。

在贫血模型中,Product 类可能只包含商品的属性(例如名称、价格、库存等),而行为则由其他类或服务提供。例如,我们可能会创建一个 ProductService 类来提供购买商品、更新库存等操作,而 Product 类只用于存储数据。这样的方式下,Product 类只是一个被动的数据持有者,而没有自己的行为。

public class Product {
    private double price;
    private String name;
    private int stock;

    public Product(String name, double price, int stock) {
        this.name = name;
        this.price = price;
        this.stock = stock;
    }

    public String getName() {
        return name;
    }

    public double getPrice() {
        return price;
    }

    public int getStock() {
        return stock;
    }
}
public class ProductService {
    public void purchase(Product product, int quantity) {
        if (quantity > product.getStock()) {
            throw new IllegalArgumentException("Not enough stock available");
        }
        product.setStock(product.getStock() - quantity);
    }
}

三、优缺点及适用场景

充血模型的优点

  1. 面向对象设计,具有良好的封装性和可维护性。
  2. 领域对象包含业务逻辑,易于理解和扩展。
  3. 可以减少过度依赖外部服务,提高系统的稳定性。

充血模型的缺点

  1. 需要对模型的理解才能更好的开发,上手成本高。
  2. 对象间的协作可能增加,导致设计变得复杂。
  3. 对象的状态可能会变得不一致,需特别注意。

贫血模型的优点

  1. 数据与行为分离,降低了对象的复杂度。
  2. 可以提高代码的重用性和可测试性。
  3. 可以更好地利用现有的服务框架。

贫血模型的缺点

  1. 对象缺乏封装性,易于出现耦合性和脆弱性。
  2. 业务逻辑被分散在多个类中,难以维护和理解。
  3. 过度依赖外部的服务,可能导致系统的不稳定性。

一般来说,对于较小的应用系统或者简单的业务流程,可以使用贫血模型;对于较大的应用系统或者复杂的业务流程,建议使用充血模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

思想和宇宙同频

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值