我最近开始学习领域驱动设计,CQRS和事件溯源。 到目前为止,我主要参与了使用“经典”N层/层架构和关系数据库的项目。 随着项目变得越来越复杂,我注意到这个模型并不总是很好。 不久之前,我写了一篇关于N层神话的文章,它已经暴露了我觉得这种类型的架构所带来的一些问题。 我尝试的第一件事是在这样的架构中应用域驱动设计。
Domain driven design
那么,实际上领域驱动设计是什么? 在领域驱动设计中,语言是最重要的因素。 我们希望的是在代码中明确表达出领域业务。 从本质上讲,作为开发人员,是希望使用与业务相同的语言。
领域驱动设计可以非常简单或非常复杂。 以下是我能想到的最简单的例子:
var acc = new Account();
var acc2 = new Account();
acc.Balance+=10;acc2.Balance-=10;
//贫血模型
public class Account {
public decimal Balance
{
get;
set;
}
}
在这里,业务逻辑存在于我们的帐户类之外。 没有转移的概念,它只是简单地添加和减去。 这更像是一种程序编码风格,你只是在操纵数据。 下一个片段显示了一种非常简单的使用语言形式来使行为显式化(注意到setter现在是私有的):
var acc = new Account();
var acc2