代码之家  ›  专栏  ›  技术社区  ›  David

面向对象的更新方法

  •  0
  • David  · 技术社区  · 16 年前

    我的任务是维护一个最初用vb6编写的应用程序。它已经被导入到vb.net中,至少可以说代码不是面向对象的。代码中充满了只包含公共共享属性(变量)和方法(函数)的类,这些类的结果限制了应用程序一次打开多个项目。

    项目由包含常规项目设置的XML文件以及包含其他项目相关数据的Access数据库的位置组成。多年来,xml文件的格式已经被修改,并且采用了更新和版本控制策略。当遇到旧版本时,所选策略在打开时执行更新。到目前为止,更新只包括重新排列xml文件中的数据,或者更改数据库模式,并将数据从xml文件移动到数据库。

    在oop中有相当多的背景知识,很容易让我看到一个项目应该是一个独立的对象,其他对象与之交互。但是,我没有看到如何在oop中应用所选择的更新策略。

    在oop中实现所选择的更新策略的问题使我至今没有使用oop。如果有人有这样一项任务的经验,或建议如何进行,我将感谢你能提供任何帮助。

    3 回复  |  直到 12 年前
        1
  •  1
  •   Stephen Wrighton    16 年前

    构建一个类,该类读取中的XML文件,并基于该文件中的数据提供属性/方法/etc。当类写回XML文件时,将其格式化为新版本所需的格式。

    所以,基本上,这个类可以读取当前版本,加上所有旧版本,但它总是会写出新版本。

    数据将保存在类的内部变量中,而不是每次需要时都必须扫描xml文件。

    在这种情况下,向XML文件中添加版本节点也会有所帮助。

        2
  •  0
  •   Garth Gilmour    16 年前

    当你使用Strategy(策略设计模式)这个词时,你可能已经回答了你自己的问题。

    也许你可以:

    • 创建一个对转换一无所知但接受策略对象的项目类。
    • 创建类的层次结构来对每个可能的转换策略建模。
    • 使用工厂方法以正确的策略构建项目对象
        3
  •  0
  •   Tirno    16 年前

    我不明白为什么这是个麻烦的问题。它可以通过多种方式解决。

    如果要执行完全面向对象的EnterpriseY类型的操作,可以采用以下解决方案的任何子集:

    • 创建接口iproject 描述其他对象如何交互 一个项目。
    • 创建当前的 实施项目的项目 能够读写 当前版本。
    • 为每个过去扩展项目 版本,重写XML和 数据库读取方法和 构造函数在以下情况下调用write 类被实例化
    • 为了获得额外的进取心,创建一个 projectfactory,它检测 文件和实例的版本 正确的版本。
    • 如果需要进一步的版本, 重写当前要执行的项目 和过去的项目一样, 访问项目的新版本 读了那么多然后打电话 写。

    此解决方案的优点是,您可以继续漫游不同的版本,而每个新版本只需要从以前的版本更新到,所有以前的版本层叠到第二个到最后的版本。