领域驱动模型架构中 领域服务层 和 仓储层的疑惑

weixin_40871647 2017-10-31 04:15:18


现在使用的框架中分了领域服务层和仓储层,并且使用到了ABP,目前遇到问题领域服务层和仓储层有些功能上的混淆

请教下这两层的使用区别以及关联。

目前遇到一个问题:比如现在有A,B两张表 ,业务逻辑是查寻A表中A1、A2以及B表中B1、B2一共四个字段,我是应该在A仓储层中查找A1、A2,在B仓储层中查找B1、B2 , 然后返回到领域服务层去进行数据处理吗? 如果这样,仓储层返回的时候要新建两个类来分别包含A1、A2,B1、B2吗?
...全文
2287 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_40871647 2017-10-31
  • 打赏
  • 举报
回复
引用 1 楼 hanjun0612 的回复:
这要看A和B的聚合关系。 通常来说,如果A和B具有聚合关系,如果A是聚合根,那么从A就能得到相应的B。 这种概念我认为类似于外键。
引用 2 楼 wanghui0380 的回复:
额,XXX园的文章就是这样不着调 领域模型就是领域模型,跟仓储没有任何关系。那本书只是在最后实践上因为需要跟数据库挂接,所以来了个仓储。然后XX园们发现这个根本就不是一个东西,他们画了一堆圈圈叉叉以后发现根本就不是那么一回事,然后在自圆其说继续在画圈圈叉叉。你的问题在XX园的圈圈叉叉里叫单根,聚合根,叫工作单元
大神,解决问题啊。。 领域驱动模式肯定是要和数据库挂钩,然后仓储这个就会有这问题,之前的简单都是做个视图直接数据库层面解决了,现在想想如果放在仓储层这个怎么弄呢?还是就不应该放在仓储层解决,而是放在 服务层去解决?
wanghui0380 2017-10-31
  • 打赏
  • 举报
回复
额,XXX园的文章就是这样不着调 领域模型就是领域模型,跟仓储没有任何关系。那本书只是在最后实践上因为需要跟数据库挂接,所以来了个仓储。然后XX园们发现这个根本就不是一个东西,他们画了一堆圈圈叉叉以后发现根本就不是那么一回事,然后在自圆其说继续在画圈圈叉叉。你的问题在XX园的圈圈叉叉里叫单根,聚合根,叫工作单元
正怒月神 2017-10-31
  • 打赏
  • 举报
回复
这要看A和B的聚合关系。 通常来说,如果A和B具有聚合关系,如果A是聚合根,那么从A就能得到相应的B。 这种概念我认为类似于外键。
第1章 介绍项目:smartga系统 1.1 问题 1.2 设计 1.2.1 可靠性和可得性 1.2.2伸缩性 1.2.3 可维护性 1.2.4 富客户应用功能 1.2.5 离线可得 1.2.6 web访问 1.2.7 智能安装和自动更新功能 1.2.8 附加客户设备支持 1.3 解决方案 1.3.1 满足可靠性、可得性、伸缩性、离线可得和附加客户设备支持需求 1.3.2 满足可维护性需求 1.3.3 满足富客户应用功能需求 1.3.4 满足web访问需求 1.3.5 满足智能安装和自动更新功能需求 1.4 总结 第2章 设计分架构 2.1 问题 .2.2 设计 2.2.1 设计visual studio解决方案 2.2.2 设计基础设施 2.3 解决方案 2.3.1 实现visual studio解决方案 2.3.2 实现架构 2.4 总结 第3章 管理项目 3.1 问题 3.2 设计 3.2.1 设计领域模型 3.2.2 定义项目聚合 3.2.3 定义聚合边界 3.2.4 设计仓储 3.2.5 编写单元测试 3.3 解决方案 3.3.1 project类 3.3.2 实现仓储 3.3.3 实现服务类 3.3.4 实现项目信息视图模型 3.3.5 实现项目信息视图 3.4 总结 第4章 公司和联系人 4.1 问题 4.2 设计 4.2.1 设计领域模型 4.2.2 定义company聚合和contact聚合 4.2.3 定义聚合边界 4.2.4 设计仓储 4.2.5 编写单元测试 4.3 解决方案 4.3.1 company类 4.3.2 contact类 4.3.3 projectcontact类 4.3.4 实现仓储 4.3.5 实现服务类 4.3.6 company视图模型 4.3.7 company视图 4.3.8 项目联系人视图模型 4.3.9 项目联系人视图 4.4 总结 第5章 递交传送 5.1 问题 5.2 设计 5.2.1 设计领域模型 5.2.2 定义submittal聚合 5.2.3 定义聚合边界 5.2.4 设计仓储 5.2.5 编写单元测试 5.3 解决方案 5.3.1 实现submittal仓储 5.3.2 实现submittal服务类 5.3.3 submittal视图模型 5.3.4 submittal视图 5.4 总结 第6章 信息请求 6.1 问题 6.2 设计 6.2.1 设计领域模型 6.2.2 定义rfi聚合 6.2.3 定义聚合边界 6.2.4 设计仓储 6.2.5 编写单元测试 6.3 解决方案 6.3.1 实现rfi仓储 6.3.2 实现rfi服务类 6.3.3 rfi视图模型类 6.3.4 rfi视图 6.4 总结 第7章 提案请求 7.1 问题 7.2 设计 7.2.1 设计领域模型 7.2.2 设计提案请求聚合 7.2.3 定义聚合边界 7.2.4 设计仓储 7.2.5 编写单元测试 7.3 解决方案 7.3.1 提案请求类的私有字段和构造器 7.3.2 proposalrequest属性 7.3.3 validate方法 7.3.4 实现提案请求仓储 7.3.5 实现提案请求服务类 7.3.6 提案请求视图模型类 7.3.7 提案请求视图 7.4 总结 第8章更改单 8.1 问题 8.2 设计 8.2.1 设计领域模型 8.2.2 设计更改单聚合 8.2.3 定义聚合边界 8.2.4 设计仓储 8.2.5 编写单元测试 8.3 解决方案 8.3.1 实现更改单仓储 8.3.2 实现更改单服务类 8.3.3 更改单视图模型类 8.3.4 更改单视图 8.4 总结 第9章 施工更改指令 9.1 问题 9.2 设计 9.2.1 设计领域模型 9.2.2 设计施工更改指令聚合 9.2.3 定义聚合边界 9.2.4 设计仓储 9.2.5 编写单元测试 9.3 解决方案 9.3.1 施工更改指令类的私有字段和构造器 9.3.2 实现施工更改指令仓储 9.3.3 实现施工更改指令服务类 9.3.4 施工更改指令视图模型类 9.3.5 施工更改指令视图 9.4 总结 第10章 和服务器同步 10.1 问题 10.2 设计 10.2.1 重新设计工作单元 10.2.2 设计同步 10.2.3 编写单元测试 10.3 解决方案 10.3.1 工作单元重构 10.3.2 和synchronizer类同步 10.4 总结 第11章 客户会员管理系统 11.1 问题 11.2 设计 11.2.1 密码安全 11.2.2 设计客户会员管理系统 11.3 解决方案 11.3.1 客户会员管理系统领域模型类 11.3.2 客户会员管理系统单元测试 11.4 总结
一共两个压缩分卷,这是第二个分卷 第ⅰ部分 让领域模型发挥作用. 第1章 消化知识 5 1.1 有效建模的因素 9 1.2 知识消化 10 1.3 持续学习 11 1.4 知识丰富的设计 12 1.5 深模型 15 第2章 交流及语言的使用 17 2.1 通用语言 17 2.2 利用对话改进模型 22 2.3 一个团队,一种语言 24 2.4 文档和图 25 2.4.1 书面的设计文档 27 2.4.2 执行的基础 29 2.5 说明性模型 29 第3章 将模型和实现绑定 32 3.1 模型驱动设计 33 3.2 建模范型和工具支持 36 3.3 突出主旨:为什么模型对用户很关键 41 3.4 实践型建模人员 43 .第ⅱ部分 模型驱动设计的构建块 第4章 分离领域 47 4.1 分架构 47 4.1.1 间的联系 51 4.1.2 架构框架 51 4.2 模型属于领域 52 4.3 其他种类的隔离 55 第5章 软件模型描述 56 5.1 关联 57 5.2 实体(又称引用对象) 62 5.2.1 实体建模 65 5.2.2 设计标识操作 66 5.3 值对象 68 5.3.1 设计值对象 71 5.3.2 设计包含值对象的关联 73 5.4 服务 74 5.4.1 服务和分隔的领域 75 5.4.2 粒度 77 5.4.3 访问服务 77 5.5 模块(包) 77 5.5.1 敏捷的模块 79 5.5.2 基础结构驱动打包的缺陷 80 5.6 建模范式 82 5.6.1 对象范式的优势 82 5.6.2 对象世界的非对象 84 5.6.3 在混合范式使用模型驱动设计 85 第6章 领域对象的生命周期 87 6.1 聚合 88 6.2 工厂 96 6.2.1 工厂及其应用场所的选择99 6.2.2 只需构造函数的情况 101 6.2.3 接口的设计 102 6.2.4 如何放置不变量的逻辑 103 6.2.5 实体工厂与值对象工厂 103 6.2.6 存储对象的重建 103 6.3 仓储 105 6.3.1 查询仓储 109 6.3.2 了解仓储实现的必要性 111 6.3.3 实现仓储 111 6.3.4 在框架内工作 113 6.3.5 与工厂的关系 113 6.4 为关系数据库设计对象 115 第7章 使用语言:扩展示例 117 7.1 货物运输系统概述 117 7.2 隔离领域:系统简介 119 7.3 区分实体和值对象 120 7.4 运输领域的关联设计 121 7.5 聚合的边界 123 7.6 选择仓储 124 7.7 场景概述 125 7.7.1 应用特性示例:改变一件货物的目的地126 7.7.2 应用特性示例:重复业务126 7.8 对象的创建 126 7.8.1 cargo的工厂和构造函数 126 7.8.2 添加一个handling event127 7.9 停下来重构:cargo聚合的另一种设计 129 7.10 运输模型的模块 131 7.11 引入新特性:配额检查 133 7.11.1 连接两个系统 134 7.11.2 改进模型:划分业务 135 7.11.3 性能调整 137 7.12 小结 137 第ⅲ部分 面向更深解的重构 第8章 突破 143 8.1 关于突破的故事 144 8.1.1 看不用的模型 144 8.1.2 突破 146 8.1.3 更深模型 148 8.1.4 冷静的决定 149 8.1.5 成效 150 8.2 时机 150 8.3 着眼于根本 151 8.4 尾声:一连串的新理解 151 第9章 隐含概念转变为显式概念 153 9.1 概念挖掘 153 9.1.1 倾听表达用语 154 9.1.2 检查不协调之处 157 9.1.3 研究矛盾之处 162 9.1.4 查阅书籍 162 9.1.5 尝试,再尝试 164 9.2 如何建模不太明显的概念 164.. 9.2.1 显式的约束 165 9.2.2 作为领域对象的流程 167 9.2.3 规格 168 9.2.4 规格的应用和实现 171 第10章 柔性设计 184 10.1 释意接口 186 10.2 无副作用函数 190 10.3 断言 194 10.4 概念轮廓 197 10.5 孤立类 201 10.6 操作封闭 203 10.7 声明性设计 205 10.8 一个声明性风格的设计 207 10.9 攻击角度 215 10.9.1 切分子领域
一共两个压缩分卷,这是第一个分卷 第ⅰ部分 让领域模型发挥作用. 第1章 消化知识 5 1.1 有效建模的因素 9 1.2 知识消化 10 1.3 持续学习 11 1.4 知识丰富的设计 12 1.5 深模型 15 第2章 交流及语言的使用 17 2.1 通用语言 17 2.2 利用对话改进模型 22 2.3 一个团队,一种语言 24 2.4 文档和图 25 2.4.1 书面的设计文档 27 2.4.2 执行的基础 29 2.5 说明性模型 29 第3章 将模型和实现绑定 32 3.1 模型驱动设计 33 3.2 建模范型和工具支持 36 3.3 突出主旨:为什么模型对用户很关键 41 3.4 实践型建模人员 43 .第ⅱ部分 模型驱动设计的构建块 第4章 分离领域 47 4.1 分架构 47 4.1.1 间的联系 51 4.1.2 架构框架 51 4.2 模型属于领域 52 4.3 其他种类的隔离 55 第5章 软件模型描述 56 5.1 关联 57 5.2 实体(又称引用对象) 62 5.2.1 实体建模 65 5.2.2 设计标识操作 66 5.3 值对象 68 5.3.1 设计值对象 71 5.3.2 设计包含值对象的关联 73 5.4 服务 74 5.4.1 服务和分隔的领域 75 5.4.2 粒度 77 5.4.3 访问服务 77 5.5 模块(包) 77 5.5.1 敏捷的模块 79 5.5.2 基础结构驱动打包的缺陷 80 5.6 建模范式 82 5.6.1 对象范式的优势 82 5.6.2 对象世界的非对象 84 5.6.3 在混合范式使用模型驱动设计 85 第6章 领域对象的生命周期 87 6.1 聚合 88 6.2 工厂 96 6.2.1 工厂及其应用场所的选择99 6.2.2 只需构造函数的情况 101 6.2.3 接口的设计 102 6.2.4 如何放置不变量的逻辑 103 6.2.5 实体工厂与值对象工厂 103 6.2.6 存储对象的重建 103 6.3 仓储 105 6.3.1 查询仓储 109 6.3.2 了解仓储实现的必要性 111 6.3.3 实现仓储 111 6.3.4 在框架内工作 113 6.3.5 与工厂的关系 113 6.4 为关系数据库设计对象 115 第7章 使用语言:扩展示例 117 7.1 货物运输系统概述 117 7.2 隔离领域:系统简介 119 7.3 区分实体和值对象 120 7.4 运输领域的关联设计 121 7.5 聚合的边界 123 7.6 选择仓储 124 7.7 场景概述 125 7.7.1 应用特性示例:改变一件货物的目的地126 7.7.2 应用特性示例:重复业务126 7.8 对象的创建 126 7.8.1 cargo的工厂和构造函数 126 7.8.2 添加一个handling event127 7.9 停下来重构:cargo聚合的另一种设计 129 7.10 运输模型的模块 131 7.11 引入新特性:配额检查 133 7.11.1 连接两个系统 134 7.11.2 改进模型:划分业务 135 7.11.3 性能调整 137 7.12 小结 137 第ⅲ部分 面向更深解的重构 第8章 突破 143 8.1 关于突破的故事 144 8.1.1 看不用的模型 144 8.1.2 突破 146 8.1.3 更深模型 148 8.1.4 冷静的决定 149 8.1.5 成效 150 8.2 时机 150 8.3 着眼于根本 151 8.4 尾声:一连串的新理解 151 第9章 隐含概念转变为显式概念 153 9.1 概念挖掘 153 9.1.1 倾听表达用语 154 9.1.2 检查不协调之处 157 9.1.3 研究矛盾之处 162 9.1.4 查阅书籍 162 9.1.5 尝试,再尝试 164 9.2 如何建模不太明显的概念 164.. 9.2.1 显式的约束 165 9.2.2 作为领域对象的流程 167 9.2.3 规格 168 9.2.4 规格的应用和实现 171 第10章 柔性设计 184 10.1 释意接口 186 10.2 无副作用函数 190 10.3 断言 194 10.4 概念轮廓 197 10.5 孤立类 201 10.6 操作封闭 203 10.7 声明性设计 205 10.8 一个声明性风格的设计 207 10.9 攻击角度 215 10.9.1 切分子领域
ABPFrameWork开发指南 入门文档 目 录 1 ABP总体介绍 1 1.1 入门介绍 1 1.1.1 ABP采用了以下技术 2 1.1.2 ABP框架已实现了以下特性 2 1.1.3 ABP适用的场景 4 1.2 多架构体系 4 1.2.1 前言 4 1.2.2 ABP的体系结构 5 1.2.3 领域 5 1.2.4 应用 6 1.2.5 基础设施 6 1.2.6 WEB与展现 6 1.2.7 其它 7 1.3 模块系统 7 1.3.1 ABP模块系统简介 7 1.3.2 生命期事件 8 1.3.3 模块依赖 9 1.3.4 自定义的模块方法 10 1.4 启动配置 11 1.4.1 配置ABP 11 1.4.2 配置模块 13 1.4.3 为一个模块创建配置 13 2 ABP公共结构 16 2.1 ABP依赖注入 16 2.1.1 传统方式的问题 16 2.1.2 解决方案 18 2.1.3 依赖注入框架 20 2.1.4 ABP依赖注入的基础结构 21 2.1.5 附件 25 2.2 ABP会话管理 26 2.2.1 简介 26 2.2.2 注入会话 27 2.2.3 使用会话属性 27 2.3 ABP日志管理 28 2.3.1 服务器端 28 2.3.2 客户端 32 2.4 ABP设置管理 32 2.4.1 介绍 32 2.4.2 定义设置 33 2.4.3 设置范围 34 2.4.4 获取设置值 35 2.4.5 更改设置 36 2.4.6 关于缓存 36 3 ABP领域 37 3.1 ABP领域—实体 37 3.1.1 实体类 37 3.1.2 接口约定 38 3.1.3 IEntity接口 41 3.2 ABP领域仓储 42 3.2.1 IRepository接口 42 3.2.2 仓储的实现 47 3.2.3 管理数据库连接 48 3.2.4 仓储的生命周期 48 3.2.5 仓储的最佳实践 48 3.3 ABP领域—工作单元 49 3.3.1 通用连接和事务管理方法 49 3.3.2 ABP的连接和事务管理 50 3.3.3 工作单元 53 3.3.4 选项 56 3.3.5 方法 57 3.3.6 事件 57 3.4 ABP领域—数据过滤器 58 3.4.1 介绍 58 3.4.2 预定义过滤器 58 3.4.3 禁用过滤器 60 3.4.4 启用过滤器 61 3.4.5 设定过滤器参数 62 3.4.6 自定义过滤器 62 3.4.7 其它对象关系映射工具 64 3.5 ABP领域领域事件 64 3.5.1 事件总线 64 3.5.2 定义事件 65 3.5.3 触发事件 65 3.5.4 事件处理 66 3.5.5 注册处理器 68 3.5.6 取消注册事件 69 4 ABP应用 71 4.1 ABP应用—应用服务 71 4.1.1 IApplicationService接口 71 4.1.2 应用服务类型 73 4.1.3 工作单元 74 4.1.4 应用服务的生命周期 76 4.2 ABP应用—数据传输对象 76 4.2.1 数据传输对象的作用 76 4.2.2 DTO 约定 & 验证 78 4.2.3 DTO和实体间的自动映射 80 4.2.4 辅助接口和类型 82 4.3 ABP应用—DTO有效性验证 82 4.3.1 使用数据注解 83 4.3.2 自定义检验 84 4.3.3 设置缺省值 85 4.4 ABP应用—权限认证 86 4.4.1 定义权限 86 4.4.2 检查权限 87 4.5 ABP应用—审计日志 90 4.5.1 配置 91 4.5.2 通过属性来启用和禁用审计日志 92 4.5.3 说明 93 5 ABP表现 94 5.1 ABP展现—动态WebApi 94 5.1.1 建立动态web api 控制器 94 5.1.2 使用动态js代理 95 5.2 ABP展现—本地化 97 5.2.1 程序语言 97 5.2.2 本地化源文件 98 5.2.3 获得一个本地化配置文件 100 5.2.4 总结 103 5.3 ABP展现—Javascript函数库 103 5.3.1 AJAX 103 5.3.2 通知 107 5.3.3 消息 107 5.3.4 用户界面的繁忙提示 109 5.3.5 Js日志接口 110 5.3.6 Javascript公共方法 111 5.4 ABP展现—导航栏 112 5.4.1 创建菜单 112 5.4.2 显示菜单 114 5.5 ABP展现—异常处理 114 5.5.1 开启错误处理 115 5.5.2 非Ajax请求 115 5.5.3 AJAX请求 117 5.5.4 异

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧