网站大量收购独家精品文档,联系QQ:2885784924

ATP代码重构.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ATP代码重构

ATPAdapter代码重组计划现状分析现存类ATPAdapter介于数据库操作与上层数据逻辑操作之间,主要用作两者之间的数据缓存,以比较宽松的查询条件从数据库中获取数据,为高效率地按照不同条件多次访问数据提供支持。图1.1:现存ATPAdapter内部组织结构ATPAdapter类起始主要为料品ATP查询功能设计,包含ATP查询过程中所有相关数据的获取过程。图1.1为现存ATPAdapter的结构。随着ATP查询功能种类不断增加,现存的ATPAdapter类在运行效率以及维护效率方面逐渐暴露出一定问题,主要问题包括:无效查询:现存ATPAdapter的固定获取数据过程必然在ATP需求以及ATP供应两张表中获取需求汇总、需求明细、供应汇总、供应明细四部分数据,并同时调用库存在手量服务获取库存数据。如果考虑选取预留记录,还需要查询预留表。特定的ATP查询过程可能不需要查询所有上述内容,这样,固定的查询所有数据的过程必然导致部分查询结果在查询结束后不被使用。与运行本地程序相比,访问数据库获得数据的开销非常大,如果在查询过程中能够避免这种无效查询过程,产品运行效率将有比较可观的提高。代码膨胀:为使现存的ATPAdapter支持尚未存在的查询过程,必须加入新的查询语句拼接成员方法以支持该查询过程,并加入新的DataTable成员缓存查询结果。这样,如果ATPAdapter支持的查询过程较多,则该类本身的代码量也较大,不利于维护,同时会加剧无效查询的问题。高耦合性:现存的ATPAdapter将部分查询逻辑的构造过程固化在其内部,同时固化了查询逻辑与数据缓存之间的对应关系,造成了两者之间较强的耦合性。这种实现方式较大地增加了对查询逻辑进行维护的难度,并降低了数据缓存的使用灵活性。在使用这种数据缓存的ATP查询功能种类达到一定数目之前,应该对现存的ATPAdapter的代码进行优化,预期减小日后产品的运行效率隐患,同时降低代码维护压力。解决方案2.1. 概要方案针对上述问题,对ATPAdapter的结构进行调整,调整内容主要为:细化查询过程:使得每次数据获取过程仅包含一个单位化的查询过程,使得ATPAdaptere的使用者能够自由组合查询过程。该调整能够解决无效查询的问题。功能分离:取消查询逻辑的构造过程与数据缓存之间的耦合,在编译时将两者分别作为独立部分处理,而在运行时结合查询逻辑的构造结果以及数据缓存以获得查询结果。该调整能够解决代码膨胀以及高耦合性问题。经过该调整,ATPAdapter的适用范围不仅限于ATP查询,而可以应用于较广泛的数据库查询场合。为保证系统的稳定性,不直接对系统中现存ATPAdapter类进行改动,所有调整部分将通过新的类重组现有代码(不排除重写部分代码的可能)的方式实现,并计划以有限产能排产ATP查询服务(OSATPQuerySV)作为调整后稳定性测试节点。2.2. 概要设计以增强代码灵活性为目的,本设计将查询逻辑的构造过程细化为可以自由组合的四个部分,以查询逻辑构造过程的灵活性。将图2.1为调整后的由数据库获得数据并缓存过程的组织结构。图2.1:调整后由数据库获得数据并缓存过程的组织结构2.2.1. 查询逻辑查询数据的逻辑最终以SQL语句表示。简单SQL语句结构可表示为:Select 查询范围 from 查询目标 where 查询条件 group by 分组条件原ATPAdapter主要提供了对查询条件的构造功能。将查询逻辑与数据缓存分离后,提供对查询范围、查询条件、查询目标以及分组条件四者的构造功能。其中:查询范围直接决定查询结果的内容,所以将由特定查询范围获得的查询结果转化为其它数据类型的功能将被绑定在该功能模块中,以在程序中对查询结果转化功能进行合理组织。查询条件的构造过程中封装了一定的执行逻辑,根据输入的查询数据获得结果,这种特征符合策略(Strategy)的设计模式。查询目标以及分组条件的构造过程支持以列举的数据库表名以及数据库表字段名的方式进行构造,以避免将过长的字符串常量存入C#程序元数据中。2.2.2. 数据缓存数据适配器支持通过输入字符串形式的查询逻辑将数据缓存至本地,每个数据适配器只包含一个数据缓存,以实现细化查询过程的要求。同时,数据适配器允许使用者输入数据的导出条件,以导出特定的缓存数据。数据的导出条件的字符串表示与查询逻辑的查条件的字符串表示结构类似,可以抽象表示为子条件1 and/or 子条件2 and/or 子条件3……这样,数据导出条件的构造过程允许构造者每次输入一个形如“and/or 子条件n”的单元,为获得形如上文抽象表示的数据导出条件,在构造数据导出条件时第一个单元的“and/or”部分将被忽略。通常情况下,第一个被输入的单元将被作为构造时的第一个单元。为支持整套数据获取模

文档评论(0)

ligennv1314 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档