2004年Eric Evans 发表Domain-Driven Design –Tackling Complexity in the Heart of Software (领域驱动设计),简称Evans DDD。领域驱动设计分为两个阶段: 以一种领域专家、设计人员、开发人员都能理解的通用语言作为相互交流的工具,在交流的过程中发现领域概念,然后将这些概念设计成一个领域模型;由领域模型驱动软件设计,用代码来实现该领域模型;由此可见,领域驱动设计的核心是建立正确的领域模型。 用户界面/展现层 负责向用户展现信息以及解释用户命令。更细的方面来讲就是: 请求应用层以获取用户所需要展现的数据; 发送命令给应用层要求其执行某个用户命令; 应用层 很薄的一层,定义软件要完成的所有任务。对外为展现层提供各种应用功能(包括查询或命令),对内调用领域层(领域对象或领域服务)完成各种业务逻辑,应用层不包含业务逻辑。 领域层 负责表达业务概念,业务状态信息以及业务规则,领域模型处于这一层,是业务软件的核心。 基础设施层 本层为其他层提供通用的技术能力;提供了层间的通信;为领域层实现持久化机制;总之,基础设施层可以通过架构和框架来支持其他层的技术需求。