这里的土牛是指abp的作者,土耳其人,简称“土牛”,前两天看了他分享的ppt,这里做个小笔记。
架构分层
图一(abp作者)
图二(clean架构)
图三(在朋友圈看到的)
每种架构没有好坏,只要是流行的,适合自己的就好。一种架构不管是否完全运用DDD思想,不重要,合理的分层是必须的!
-
表现层
-
应用层(用例)
-
领域层
-
基础设施层
领域驱动的核心构件
最佳实践
Repositories 原则
-
repository 是一个类似于集合的接口,可与数据库交互以读取和写入实体
-
在domain layer定义接口,在infrastructure中实现
-
不包含domain 逻辑
-
Repository 接口应独立于数据库/ ORM
-
为聚合根而非实体创建repositories
Application Services 原则
-
实现应用程序的用例(应用逻辑)
-
不实现核心domain逻辑
-
获取并返回数据传输对象(DTO),而不是实体(entities)
-
在内部使用领域服务,实体,仓储,和其他领域对象。
Application Services通用DTO原则最佳实践
-
应该序列化
-
应该有一个无参数的构造函数
-
不应该包含业务逻辑
-
不要从实体继承!不要引用实体!
Input DTO 最佳实践
-
仅定义用例所需的属性
-
不要在多个用例(服务方法)中重复使用相同的输入DTO。
例如:
-
ID 在创建的时候不会使用!创建和修改不要共享相同的dto!
-
密码在更改和ChangeUserName不会使用!
另外两个最佳实战
-
仅实现形式验证(可以使用数据注释属性)
-
不包括域验证逻辑(例如:唯一用户名约束)
Application Services Output DTO 建议
-
保持输出DTO文件数量最小。尽可能重复使用(不能把输入DTO作为输出DTO)。
-
可能包含比客户需求更多的属性
-
创建和更新方法返回实体DTO。
-
例外:性能至关重要的地方,尤其是对于大型结果集。
vs
Application Services 对象映射
-
使用自动对象映射库(但是,请小心–启用配置验证)
-
不要将输入DTO映射到实体。
-
将实体映射到输出DTO
Multiple Application Layers 多个应用层
-
为每种应用程序类型创建单独的应用程序层。
-
使用单个领域层 共享核心域逻辑。
ppt:https://github.com/hikalkan/presentations