免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
仓储模式的实现仓储Repository模式已经成为最主流的模式,数据库持久化很长时间以来是一个讨论热点,目前主要问题是:主流软件并不容易有效地将需要存储的数据映射到外部存储空间如关系数据库或NoSQL数据库。技术难点虽然已经被一些ORM工具如Hibernate等解决了,过去,我们通常使用DAO或ORM来进行业务对象和持久化数据表之间进行转换,这些技术很好,但是他们还是属于底层技术,并不能透明地和我们统一语言整合。下面的问题是如何将持久化动作和对象获取方式以及领域模型Domain Model结合起来,更进一步地说:如何更加统一我们的语言(Ubiquitous Language)(不至于出现Hibernate等底层技术语言,统一为业务语言)。一个整合持久化技术的好办法是仓储Repositories,在Evans书籍中定义它是:一种机制,用于封装存储 获取 搜寻一群对象集合等行为。这个定义很容易向领域专家解释,整合到统一语言中。第一:命名一般人仓储类如下命名:class OrderRepository List getOrdersFor(Account a).而Rodrigo Yoshima 认为应该如下取名:class AllOrders List belongingTo(Account a).似乎是一个小的改变,但是有帮助得多,如果两个仓储包含不属于他们的方法,我们如何分辨他们呢?/classic naming styleclass UserRepository User retrieveUserByLogin(String login). void submitOrder(Order order).客户端调用代码:User u = userRepository.retrieveUserByLogin(“pcalcado”);userRepository.submitOrder(new Order();而Yoshima的取名方式如下:/Yoshimas naming styleclass AllUsers User withLogin(String login). void submitOrder(Order order). /client code /非常符合英语风格,象说话一样。User u = allusers.withLogin(“pcalcado”);allusers.submitOrder(new Order();一定要记住:你使用的语言方式会影响你如何思考。以retrieve或get为开始方法名是坏味道。第二:避免方法爆炸一个好的仓储将领域概念建模在其接口中,让我们看一个业务规则:每个订单在周末都要增加10%的附加费。如果我们要显示所有订单,如下:List surchargedOrders = allOrders.placed(user, IN_A_SATURDAY);surchargedOrders.addAll(allOrders.placed(user, IN_A_SUNDAY);return surchargedOrders;这虽然工作很好,但是忘记了抽象,增加附加费这个规则是不应该暴露给调用客户端的,如下会更好些:return allOrders.surchargedFor(user);为了实现这点,可能需要多个实体反复查询,你可以使用规格模式Specification来实现,如下:Specification surcharged = specifications.surcharged();return allOrders.thatAre(user, surchanged);如果我们要获取没有附加费或者有附加费的订单,需要两个仓储AllOrders 和 SurchargedOrders.如下:/returns all ordersreturn allOrders.from(user); /returns only orders with applied surchargereturn surchargedOrders.from(user);Subset Repositories子集仓储一般被建模成带有参数实例的仓储类,如下:/a base Repositoryclass Users private User.Status desiredStatus = null; public Users() this(User.Status.ANY); public Users(User.Status desiredStatus) this.desiredStatus= desiredStatus; /methods go here. /instantiated somewhere asprivate Users allUsers = new Users();private Users activeUsers = new Users(User.Status.ACTIVE);private Users inactiveUsers = new Users(User.Status.INACTIVE);第三:只有一个类型如下代码,虽然使用了好的命名规则public interface AllServices List belongingTo(List accounts); Service withNumber(String serviceNumber); List relatedTo(Service otherService); List allActiveProductsBelongingTo(List accounts); List allProductsBelongingTo(List accounts); ContractDetails retrieveContractDetails(String serviceNumber);方法返回了Service类型集合,还返回了Product集合,是多个集合,好的设计最好返回同一个类型集合:public interface AllServices List belongingTo(List accounts); Service withNumber(String serviceNumber); List relatedTo(Service otherService); public interface AllProducts List activeBelongingTo(List accounts); List belongingTo(List accounts); public interface AllContractDetails ContractDetails forServiceNumber(String serviceNumber);如果特别情形需要,你可以创建一个Wrapper类,将这些方法都放入其中,如下:public class BillingSystemGateway implements AllServices, AllProducts , AllContractDetails List belongingTo(List accounts). Service withNumber(String serviceNumber) . List relatedTo(Service otherService) . List activeBelongingTo(List accounts) . List belongingTo(List accounts) . ContractD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025~2026学年山东省济南市天桥区七年级英语第一学期期末考试试题(含答案无听力原文及音频)
- 五年级下册语文期末试卷及答案
- 无领导小组题目及答案
- 初中数学知识树说课课件
- 2022~2023临床执业医师考试题库及答案第465期
- 微型小说三题微型小说《在》
- 2022~2023专升本考试题库及答案第411期
- 二氧化碳气体保护焊技术要点
- 临猗事业编招聘2022年考试模拟试题及答案解析6
- 施工能力考试题及答案
- 《SPSS与AMOS在中介效应与调节效应分析中的应用》
- 家属院停车管理暂行办法
- 锡圆电子科技有限公司高端半导体封测项目环评资料环境影响
- T/CGAS 026.2-2023瓶装液化石油气管理规范第2部分:平台建设
- GB/T 45356-2025无压埋地排污、排水用聚丙烯(PP)管道系统
- 设备管理人员19年述职
- 2025年黑龙江农垦职业学院单招职业倾向性测试题库附答案
- 《外科手术学基础》课件
- 拖欠工程款上访信范文
- 语文-安徽省皖南八校2025届高三上学期12月第二次大联考试题和答案
- 《传播学概论(第四版)》全套教学课件
评论
0/150
提交评论