贫血模型和充血模型
- 贫血模型:
- 特点:领域对象只包含数据属性(字段或属性),而对这些数据的操作(业务逻辑)则放置在领域对象之外,通常在服务层或其他层中实现。可以将其理解为 “数据 + 数据访问方法” 的简单组合,领域对象本身缺乏行为,就像贫血一样,没有足够的 “活力” 。
- 举例:以一个简单的用户管理场景为例,贫血模型下的
User
类可能如下:
class User
{public string UserName { get; set; } // 用户名public string PasswordHash { get; set; } // 密码的哈希值public int Credit { get; set; } // 积分
}
充血模型
- 充血模型:
- 特点:领域对象不仅包含数据属性,还将对这些数据的相关业务逻辑封装在对象内部,使领域对象更加 “丰满” 和具有行为能力,符合面向对象设计中 “对象是数据和行为的统一体” 的理念。
- 举例:同样是用户管理场景,充血模型下的
User
类实现如下:
public class User
{public string UserName { get; init; }public int Credit { get; private set; }private string? passwordHash;public User(string userName){this.UserName = userName;this.Credit = 10;}public void ChangePassword(string newValue){if (newValue.Length < 6){throw new ArgumentException("密码太短");}this.passwordHash = HashHelper.Hash(newValue);}public bool CheckPassword(string password){string hash = HashHelper.Hash(password);return passwordHash == hash;}public void DeductCredits(int delta){if (delta <= 0){throw new ArgumentException("额度不能为负值");}this.Credit -= delta;}public void AddCredits(int delta){this.Credit += delta;}
}