面向对象的更新方法

Posted

技术标签:

【中文标题】面向对象的更新方法【英文标题】:Object Oriented Update Approach 【发布时间】:2010-09-10 05:52:39 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

将 VERSION 节点添加到您的 XML 文件中也会有所帮助。

【讨论】:

虽然我同意这很可能是目前最好的解决方案,但它放弃了开放策略的更新,转而支持保存策略的更新。目前,更新保存是可行的,但随着我们转向更多由数据库驱动的解决方案,这很可能还不够。【参考方案2】:

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

也许你可以:

创建一个对转化一无所知但接受策略对象的项目类。 创建类层次结构以对每种可能的转换策略进行建模。 使用工厂方法以正确的策略构建项目对象

【讨论】:

【参考方案3】:

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

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

创建一个接口 IProject 描述其他对象如何交互 有一个项目。 创建当前的实现 实施 IProject 的项目 并且可以读取和写入 当前版本。 为每个过去扩展项目 版本,覆盖 xml 和 数据库读取方法并具有 构造函数调用 write 当这些 类被实例化 为了增加企业精神,创建一个 ProjectFactory,它检测 文件的版本并实例化 正确的版本。 如果需要更多版本, 重写当前项目做 和过去的项目一样, 访问新版本的 Project 读取所有内容,然后调用 写。

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

【讨论】:

以上是关于面向对象的更新方法的主要内容,如果未能解决你的问题,请参考以下文章

Java学习轨迹面向对象(持续更新)

结构化方法与面向对象方法之应用比较

面向对象编程思想总结

13章面向对象

草根学Python 面向对象

C#面向对象基础