面向对象的更新方法
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 读取所有内容,然后调用 写。此解决方案的优点是您可以继续在不同版本中徘徊,每个新版本只需要能够从之前的版本更新到之前的版本,所有之前的版本都会级联到倒数第二个版本。
【讨论】:
以上是关于面向对象的更新方法的主要内容,如果未能解决你的问题,请参考以下文章