Repository总结

摘要:
域层(DomainModel和DomainService)需要什么样的数据?根据域层的需要,Repository仅提供有限数量的接口,包括用于查询数据的FindById和GetAll方法。固定,特别是通用固定(通用存储库)很容易转到DA模式。当存储库是自由定制的接口时,DomainModel必须设计为聚合模型。

Repository有两种实现思想
1.自由式。领域层(DomainModel和DomainService)需要什么样的数据,都问Repository拿,Repository根据领域层的需要,增加许多方法。
2.固定式。Repository只提供有限的几个接口,其中查询数据只提供FindById、GetAll几种方法。

注意,固定式、特别是泛型的固定式(泛型的Repository)容易流于DA模式。
DA模式与Repository模式有显著差别,要注意区分。

我越来越倾向于用固定式。
但固定式有个前提:DomainModel必须设计为聚合模型,访问任何数据,都必须从聚合根入手,不能跳过聚合根。
例如我们要获得某张销售订单的所有货品,那么不能直接从销售明细中查找,而必须从销售订单(聚合根)得到销售明细,然后再从销售明细获得货品。

为什么要这么做?
1.能够轻易地区分每个Repository的职责。当Repository是自由定制接口时,有许多查询方法不知道该写在哪个Repository中;
2.防止Repository接口的重复和膨胀。当多人编写Repository时,容易有重复的接口(写在不同的Repository中),而且随着领域模型的增大,Repository接口会成倍增长,但除了少量的接口,大部分接口都是专用的(只有一个调用者,且只在一个地方调用)。
3.重要的原因是为了强调聚合根。当Repository固定时,任何数据的访问必须从聚合根入手。这就保证了我们在设计系统时,必须以OO的思想来设计领域模型,而不是以ER模型的思想来设计领域模型。

免责声明:文章转载自《Repository总结》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CSS 设置背景透明度,不影响子元素Objective-C调用Swift下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mysql基础01-语法

数据库 数据的存储:将数据放到表中,表再放到库中。 一个数据库中可以有多个表,每个表都有一个名字,用来标识自己。表名具有唯一性。 表由列组成,我们也称为字段。每个字段描述了它所含有的数据的意义表由列组成,我们也称为字段。每个字段描述了它所含有的数据的意义 表中的数据是按行存储的,一行即为一条记录。 MySQL下载安装略过 MySQL设置命令 net sta...

面向接口编程的基本原则

1. 单一职责原则SRP ( Single Responsibility Principle ) 对于单一职责原则,其核心思想为:一个类,最好只做一件事,只有一个引起它的变化。单一职责原则可以看做是低耦合、高内聚在面向对象原则上的引申,将职责 定义为引起变化的原因,以提高内聚性来减少引起变化的原因。职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相...

java web 中的 controller、service、persistence(mapper)、domain 分别是什么作用?

代表了服务端接口的 4 层,第一层是控制层(controller),负责接口请求/响应的控制,调用第二层业务逻辑层(service 一般分为接口和实现),完成具体业务功能,它会调用第三层数据持久层 persistence(mapper)的逻辑,作用是访问数据库,向数据库发送 SQL 完成数据库操作。第四层是数据模型层 domain,保存着与数据库表所对应的...

阿里巴巴Java开发手册(命名规范/常量定义篇)——查自己的漏-补自己的缺

一、编程规约 (一) 命名规约 1. 【强制】所有编程相关命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例: _name / __name / $Object / name_ / name$ / Object$ 6. 【强制】抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的...

C++ 实现插件体系

用C++实现的一种插件体系结构-----概述 清源游民 gameogre@gmail.com本文讨论一种简单却有效的插件体系结构,它使用C++,动态链接库,基于面向对象编程的思想。首先来看一下使用插件机制能给我们带来哪些方面的好处,从而在适当时候合理的选择使用。1,增强代码的透明度与一致性:因为插件通常会封装第三方类库或是其他人编写的代码,需要清晰地定义出...

Vue + Element UI 实现权限管理系统 前端篇(十):动态加载菜单

动态加载菜单 之前的 导航树 是写死的,实际应用中需要从后台服务器获取菜单数据之后动态生成。 之前的mock已经准备好了模拟数据 接口模块化 之前说过,当接口变多时,放在一个 interface.js 中不方便维护。 现在改名为 api.js 作为集合文件,将里面的 相关接口 都转入新的文件夹 modules 里面。  模块化之后,模块接口写在相应的模块...