『埃尔法哥哥』设计面向DDD的微服务( 二 )
2.Application Layer
定义软件要执行的工作 , 并引导(可表达的领域对象)解决问题 。
该层对对业务负责 , 有时会与其他系统的应用程序层交互 。
该层 保持薄 : 它不包含业务规则或知识 , 而仅协调任务并将工作委托给下一层的域对象协作;
它没有反映业务情况的状态 , 但是可以具有反映用户或程序的任务进度的状态 。
微服务的应用层在.NET中一般表现为WebAPI , webapi实现交互、远程网络连接、为UI/Client app提供的外部请求中转 。
再次强调webapi不应该包含业务规则或领域知识(尤其是用于事务或更新的领域规则) , 这些应归领域模型类库所有 。
应用层只能协调任务 , 不能保存或定义任何域状态(域模型) , 它将业务规则的执行委托给领域模型类本身(聚合根和域实体) , 这将最终更新这些域实体中的数据 。
总体来看 , 应用层是为实现前端用例的地方 。
3. The infrastructure layer
基础设施层: 定义如何将最初保存在领域实体中的数据持久化到数据库或者其他存储结构的过程 。
一个示例是使用Entity Framework Core代码实现存储库模式类: 该存储库模式类使用DBContext将数据持久存储在关系数据库中 。
根据前面提到的 持久化无感知 和 基础设施无感知 原则 , 基础设施层不得“污染”领域模型层 。
再次强调:必须保持领域层实体对基础设施层框架的无感知状态 ,领域模型层类库应该只包含领域代码 , 而只有POCO实体类可以实现软件的核心 , 并且与基础设施技术完全脱钩 。
本文插图
总结
在DDD中 , 应用层依赖于领域和基础设施层 , 而基础设施依赖于领域层 , 但是领域层不依赖于任何层 。
只在领域层编写业务规则和通用的领域知识 , 而应用层负责针对软件的目标来组合、协调领域层的业务规则 。
领域层的领域实体、值类型、聚合根反映了真实业务的核心 , 需要用一种通用的语言来定义 , 这样不管应用层多么复杂 , 核心领域层自岿然不动 。
领域层不能直接依赖与基础设施层 , 现代ORM框架一般都提出仓储模型来帮助领域层和技术设施层解耦 。
本文插图
推荐阅读
- 「」儿童节就送阿尔法蛋学习手表,安全贴心又能学习
- -悟空哥哥-618年中大促力来袭,iQOO Neo3应该是你不容错过的5G手机
- 埃尔法哥哥面对用户需求与AI技术之间的不平衡,AI产品经理该如何做?
- 埃尔法哥哥谁说机器学习难?它在这朵云上就没有门槛
- 埃尔法哥哥Python基础语法之“数据应用”
- 埃尔法哥哥Bionumerics软件的多位点VNTR分析
- 埃尔法哥哥一个例子就能读懂大数据,原来数据分析能在这些行业里使用
- 埃尔法哥哥C++程序员的职业生涯规划
- 埃尔法哥哥MAML-Tracker:用目标检测思路做目标跟踪?小样本即可得高准确率丨CVPR 2020
- 埃尔法哥哥数据规范之代码表
