谈架构设计中DDD思想的运用
首先,描述一下我的业务场景及项目分层结构,非标准DDD(其实我不觉得有标准),只是思考的时候有带入DDD思想。
业务场景:这是一个ERP系统对中台提供的接口项目,仓储操作大多都是存储过程去完成的。
项目结构,如图:

WebAPI层:这个不用多说了,入口。
DTO层:增加数据传入传出对象,和领域model、实体model区分。(要不要围绕领域model或从现有系统中提取领域model看实际业务情况,拿我目前这个项目来说,得不偿失。)
Services层:业务服务层(可以命名成BizServices区分),主要写一些业务逻辑,然后调用领域服务层DomainServices(如果有的话),如果没有,则直接调用仓储服务,进行持久化操作。
Repository层:打算用dapper进行持久化操作,对外提供RepositoryService。我这里比较特殊,下面讲。
融合了一部分DDD思想后,项目结构和流程本来应该是这样:Request→WebAPI→DTO→BizServices→DomainServices→RepositoryService→DTO→Response。
一个Request对应一个BizServices可能对应多个DomainServices可能对应多个RepositoryService
实际是这样的:Request→WebAPI→DTO→BizServices→RepositoryService/.DomainService→DTO→Response。
那么,问题就来了:
因为DomainServices应该做的聚合Repository.Service的操作实际都在存储过程中进行了,但Repository.Service同时完成了Repository.Service和DomainServices一起干的事情,产生了越界,这个不管我把DomainServices拿出去放外面一层,实际情况都如上所述。
症结就是存储过程干了DomainServices的事情,不要跟我说把存储过程的事情拿出来重新写一遍,你以为面对不知道有没有1000个的存储过程我没认真想过嘛,所以Repository.Service.DomainServices就是为了标注这种歧义。
哈哈哈,说完了,不知道大家有没有看明白,望得到高人指点。
谈架构设计中DDD思想的运用的更多相关文章
- VO(DTO)模式在架构设计中是否需要
		
DTO(VO):也就是一般意义上的VO,封装后的对象.一般用于Web层—Service层间的数据传输入. PO:也就是一般概念上的Domain Object,如hibernate 中的Entity.一 ...
 - Medium开发团队谈架构设计_转
		
转自:Medium开发团队谈架构设计 背景 说到底,Medium是个社交网络,人们可以在这里分享有意思的故事和想法.据统计,目前累积的用户阅读时间已经超过14亿分钟,合两千六百年. 我们支持着每个月两 ...
 - .NET Core/.NET5/.NET6 开源项目汇总6:框架与架构设计(DDD、云原生/微服务/容器/DevOps/CICD等)项目
		
系列目录 [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...
 - 浅谈UI设计中妙用无穷的深色系背景
		
英文:medium 译者:优设网 - 陈子木 链接:http://www.uisdc.com/ui-benefits-of-dark-background# --------------------- ...
 - web系统架构设计中需要知道的点(前端篇)
		
上周没写东西,这周写点互联网系统开发中需要了解的技术点,每个点都可以发散出去,连接更多的知识点,打算做个逐步细化的记录. 一个应用的整个生命周期中(生,老,病,死)都需要有一个整体规划. 前期 评估需 ...
 - Unity应用架构设计(12)——AOP思想的实践
		
想象一下,当程序所有的业务逻辑都完成的时候,你可能还来不及喘口气,紧张的测试即将来临.你的Boss告诉你,虽然程序没问题,但某些方法为什么执行这么慢,性能堪忧.领会了Boss的意图之后,漫长的排查问题 ...
 - Java开发架构篇:DDD模型领域层决策规则树服务设计
		
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在上一章节介绍了领域驱动设计的基本概念以及按照领域驱动设计的思想进行代码分层,但是仅 ...
 - java设计模式--基础思想总结--抽象类与架构设计思想
		
抽象类?这个东西我感觉没什么卵用啊,又不能拿来new对象,没有具体的对象的抽象类,有什么实际的意义呢?这是很多刚刚接触java抽象类语法时的第一反应(当然,包括我).确实,很多刚刚接触抽象类这个概念的 ...
 - Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲
		
Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台: 微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...
 
随机推荐
- China .NET Conf 2019-.NET技术架构下的混沌工程实践
			
这个月的8号.9号,个人很荣幸参加了China.NET Conf 2019 , 中国.NET开发者峰会,同时分享了技术专题<.NET技术架构下的混沌工程实践>,给广大的.NET开发小伙伴介 ...
 - Linux如何添加硬盘
			
一.命令操作: df #查看磁盘空间 fdisk #分区/查看分区 mkfs #格式化 df -h(以人类易读) -m(以M为单位读取) #查看硬 ...
 - css的块级元素和行级元素
			
块级元素 概念: 每个块级元素都是独自占一行. 元素的高度.宽度.行高和边距都是可以设置的. 元素的宽度如果不设置的话,默认为父元素的宽度(父元素宽度100%) <address>/ ...
 - 随机点名小程序--- -JAVA版本
			
话不多少,直接上代码 一个能够直接运行的随机点名的小程序,一个界面化的小程序.望广大网友多多支持! 1.创建一个随机点名的类 public class ProcessRandomName { JFra ...
 - 使用 Zephir 轻松构建 PHP 扩展
			
简介: 通过 PHP 扩展, 我们可以在 php 代码中使用一些特定的方法(大部分的 php 扩展都是用 C 写的). 比如,在 PHP 中需要与 SQLite3 交互,我们可以自己写方法与之进行连接 ...
 - [Collection] 的常用方法有这些。
 - .NET进阶篇06-async异步、thread多线程3
			
知识需要不断积累.总结和沉淀,思考和写作是成长的催化剂 梯子 一.任务Task1.启动任务2.阻塞延续3.任务层次结构4.枚举参数5.任务取消6.任务结果7.异常二.并行Parallel1.Paral ...
 - 使用sklearn和caffe进行逻辑回归 | Brewing Logistic Regression then Going Deeper
			
原文首发于个人博客https://kezunlin.me/post/c50b0018/,欢迎阅读! Brewing Logistic Regression then Going Deeper. Bre ...
 - beta week 2/2 Scrum立会报告+燃尽图 01
			
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9954 一.小组情况 队名:扛把子 组长:孙晓宇 组员:宋晓丽 梁梦瑶 韩昊 ...
 - Java工作流系统-驰骋BPM工作流 引擎的工作模式
			
关键字:驰骋工作流引擎 流程引擎工作模式 流程中间件工作模式 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流bpm工作流系统 java工作流主流框架 自定义工 ...