本文介绍了如何利用领域驱动设计(DDD)构建简约的客户关系管理(CRM)系统,通过定义实体、值对象、仓库和服务,形成可扩展、可维护的项目结构,并将业务逻辑整合到Ktor应用中,创建清晰的代码架构。
.NET 9和EF Core 9支持领域驱动设计,但值对象集合导致性能问题。我通过非追踪查询和分割查询提高性能,最终选择使用常规实体处理值对象集合并实现审计日志,但发现这污染了审计记录,因此改用常规属性以保持整洁。总的来说,EF Core 9在值对象支持方面表现良好,但未充分利用其所有功能。
本文讨论了值对象、业务规则、软件设计、充血还是贫血模型以及面向聚合根统一操作等主题。值对象可以是原子的或复合的,业务规则是软件的重要组成部分,充血模型和贫血模型是关于业务逻辑放在实体对象还是服务类中的争论,面向聚合根统一操作是指对聚合根进行操作以保持一致性。应用分层可以根据聚合维度进行划分,每个层有不同的职责。
根据业务需求,将实体、值对象、领域服务分别设计成有状态和无状态的对象,将活动、参与资格、权益设计成一个聚合,活动参与记录作为一个单独的聚合,应用服务利用Repository获取对象,执行操作,实现用例。模型中可以分别设计配置和参与活动,活动参与记录可以建模成领域事件,定义「用户参与活动逻辑」的概念,享受DDD带来的收益。
完成下面两步后,将自动完成登录并继续当前操作。