0

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

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

对 OOP 有相当多的背景知识,我很容易看出一个项目应该是一个自包含的对象,其他对象与之交互。但是,我看不到如何在 OOP 中应用所选的更新策略。

在 OOP 中实施所选更新策略的问题使我至今无法使用 OOP。如果有人有此类任务的经验,或有关如何进行的建议,我将不胜感激您能提供的任何帮助。

4

3 回答 3

1

构建一个读取 XML 文件的类,并根据该文件中的数据提供属性/方法/等。当该类将 XML 文件写回时,以新版本所需的方式对其进行格式化。

因此,基本上,该类将能够读取当前版本以及所有旧版本,但它总是会写出新版本。

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

在这种情况下,将 VERSION 节点添加到您的 XML 文件中也会有所帮助。

于 2008-09-17T16:36:17.527 回答
0

当您使用“策略”一词(即策略设计模式)时,您可能已经回答了自己的问题。

可能你可以:

  • 创建一个对转换一无所知但接受策略对象的项目类。
  • 创建类层次结构以对每个可能的转换策略进行建模。
  • 使用工厂方法以正确的策略构建您的项目对象
于 2008-09-17T16:47:53.287 回答
0

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

如果您想做一个完整的面向对象的企业类型的事情,您可以采用以下解决方案的任何子集:

  • 创建一个描述其他对象如何与项目交互的接口 IProject。
  • 创建实现 IProject 并且可以读取和写入当前版本的 Project 的当前实现。
  • 为每个过去的版本扩展项目,覆盖 xml 和数据库读取方法,并在实例化这些类时让构造函数调用 write
  • 对于额外的企业性,创建一个 ProjectFactory,它检测文件的版本并实例化正确的版本。
  • 如果需要更多版本,请重写当前项目以执行与过去项目相同的操作,使用所有读取访问新版本的 Project,然后调用 write。

此解决方案的优点是您可以继续使用不同的版本,每个新版本只需要从以前的版本更新到的能力,所有以前的版本都可以级联到倒数第二个版本。

于 2008-09-17T16:53:40.810 回答