持久化框架.pptVIP

  1. 1、本文档共64页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
持久化框架.ppt

* thorough transaction handling 完整的事务处理 * 使用模板方法设计的框架 将ProductSpecificationRDBMapper中get()部分通用部分单独提取出来 it is common for the template method to be public, and the hook method to be protected. * * 使用前面的框架 ——定义ProductDescriptionRDBMapper类 覆盖或实现getObjectFromStorage()方法,自动获得框架中的算法 假定getObjectFromStorage()方法中 从数据库读取各种对象时仅select语句中的数据库表名不同,则可进一步精化为下图,将select语句也放入框架中 * 框架的进一步精化 * 红色部分是内部的方法调用,与模板无关 蓝色部分是调用钩子方法, 将获得记录作为通用的部分,而得到记录后如何创建对象放在每个不同的子类中 AbstractRDBMapper中 getObjectFromStorage()作为AbstractPersistenceMapper的hook的同时,作为ProductDescriptionRDBMapper的模板方法,钩子方法是getObjectFromRecord() * 最终的持久化框架及其使用 * 最终的持久化框架 下面的包:抽象类和接口组成的框架 上面的包:具体的实现类 其中:ProductDescriptionInMemoryTestDataMapper 用于测试,不访问任何外部存储库,直接将对象硬编码进来用于测试 * Get方法加上 guarded,线程安全 不同线程同时物化同一个对象(都在读取数据库中同一个记录来创建对象) * 映射器的配置,如何配置ProductSpecification类使用ProductSpecificationRDBMapper、Sale使用SaleRDBMapper? 使用工厂模式,但这个例子是不好的设计,若再增加类X使用XFileMapper,则需修改MapperFactory。增加getFileMapper( )方法 * 该幻灯上例为更好的设计,将class与Mapper的映射关系从系统属性读取,放在Map数据结构中 下例为调用方法 * 对前面的例子(如该页幻灯)进一步隐藏SQL语句(考虑到SQL语句可能变化,不再使用前面分析中的提炼为getDBRecord()的方法) 而是如下 * 原来的做法 * RDBOperations使用单体模式,并将所有SQL操作放在RDBOperations类中,便于SQL专家进行维护和性能调优 还可方便地将硬编写的SQL替换为RDB存储过程调用等,或更复杂的基于元数据生成SQL,在外界定义元数据的规格说明,动态产生SQL。 * * * Transactional States and the State Pattern * 持久化对象的状态图——针对PersistentObject类的状态图 simplified view of transactions. new 刚创建还没写入数据库 old: 已经从数据库中取出 Clean 未修改过 Dirty 修改过了 oldClean和数据库中一致 oldDirty修改过还未写入数据库 olddelete:删除了,尚未从数据库删除 deleted 删除了 reload从数据库中重新加载老的信息 update更新数据库 1.对象刚产生时怎么样?——两种产生方式,对应不同状态 2. 接着可以对对象做什么操作?-save or delete,分别作不同处理 * 一种简化的设计——每个持久化对象都扩展PersistentObject类,这样获得PersistentObject提供的技术服务 但可能导致一些问题:应用逻辑和持久化服务的混合 * PersistentObject类的状态图 一种代码实现方式 * 另一种使用状态模式实现PersistentObject类的状态图 具体见下页 * 每个具体的状态定义为不同的类 * 各个状态类实现和状态图中对应的方法(修改数据库、切换状态) 9. The Deleted class is omitted due to space constraints in the diagram. * 前面是简化了的trasaction,这里进一步讨论几个设计问题 * 一个transaction中可能有两个插入、一个update和三个delete,其顺序影响其成功与否以及性能 Designing a Transaction with the Command

文档评论(0)

wumanduo11 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档