概述
Domain层为绝对的核心,Domain层不依赖任何其他层。Domain层完全描述业务对象,是一个充血模型,且模型中的实体不与数据表相互映射,数据的落库对Domain来说就相当于将对象序列化的保存操作,由Infrastructure层完成。Application层将Domain层进行应用层面的组装,如创建用户时需要先验证用户属性是否正确;UserInterface层可以调用Application层进行业务逻辑的处理(增删改),也可以直接调用Infrastructure层进行数据的读取,实现读写的分离,同时也减少类似服务层仅做一个调用传递的操作,减少代码冗余。
细说
Domain层
不依赖任何其他层。完成实体的抽象建模。
定义实体(充血模型)User,其中包括用户所需的属性及方法,前者描述实体的状态,后者描述对象的行为(User对象可以做什么)。
定义规范:操作实体的接口,如保存User实体的方法(将User保存到数据库),由Infrastructure层实现。
Infrastructure层
仅依赖Domain层,为Domain层提供服务。
定义数据模型(贫血模型),与数据库表一一映射,支持与Domain层实体的类型转换。
实现规范:实现Domain定义的规范,如保存到数据库。
Application层
仅依赖Domain层,以Domain层实体为“原料”。
定义对象,对外提供完整的、可用的业务实体/领域。
UserInterface层
调用Application进行业务的逻辑处理。
调用Infrastructure层进行数据的读取。
项目实践
- 创建一个空项目tim-ddd-one,作为项目容器
- 创建各个模块: tim-api,tim-domain,tim-infrastructure,tim-application
需要代码的请私聊,期待一起学习研究.