当前位置: 首页 > news >正文

DDD - 技术落地

贫血模型和充血模型

  • 贫血模型:
    • 特点:领域对象只包含数据属性(字段或属性),而对这些数据的操作(业务逻辑)则放置在领域对象之外,通常在服务层或其他层中实现。可以将其理解为 “数据 + 数据访问方法” 的简单组合,领域对象本身缺乏行为,就像贫血一样,没有足够的 “活力” 。
    • 举例:以一个简单的用户管理场景为例,贫血模型下的 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;}
}
http://www.hskmm.com/?act=detail&tid=11990

相关文章:

  • 一些dp技巧
  • 2025.09.20|第十一届全国地图学与地理信息系统学术大会在线报告_刘纪平报告
  • C++经典排序技巧总结
  • 静态资源管理:Nginx在Docker中的部署
  • C#文件操作入门
  • javascript基础 - Ref
  • ES——(一)基本概念 - 指南
  • python2.7+pandas
  • SAP集成HTTP接口(x-www-form-urlencoded格式)
  • iText与OpenPDF使用差异及中文处理完全指南 - 实践
  • 图解17:5中网络IO模型
  • Fmt库在CentOS 7的应用指南
  • 在k8s集群中解决master节点与node通信
  • 在Go中构建应用级IP防火墙机制
  • 用 R 语言实现验证码识别
  • 用 Lua 实现验证码识别
  • PHP中常见数组操作函数
  • AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)
  • 修复Ubuntu系统文件损坏:手动fsck指令
  • Python网络请求库requests使用详述
  • Composer在PHP项目中的手动类自动加载策略
  • window表现驱动开发—视频呈现网络简介
  • 一类特征方程在数列递推中的应用
  • rust跨文件调用代码
  • 详细介绍:导师推荐毕设:基于SpringBoot+Vue的中小企业进销存管理系统设计
  • NIO重构UDP收发模块
  • nvidia-smi 卡死问题解决
  • 临时
  • 题解:SP6562 PRUBALL - Esferas
  • 个人项目-文本查重