Architecture 如何实现“类版本控制”(使用同一类的不同版本)
问题是:我们的主课说:每年都有合同变更。添加了一些属性,删除了其他属性。我们不知道明年会是什么样子。它可能会改变很多,或者根本不会改变 另一方面,我们现在有了新的要求。。。必须保存每一份合同的历史记录。每次用户更新合同时,整个对象都必须存储在备份中,例如序列化在表中 当然,我们必须能够读回它。。。一个选择是每年都有一个新的合同类Contract2008,Contract2009 但这将是非常麻烦和丑陋的,因为许多类依赖于契约——事实上,我们每年都必须创建一批新类 有过这种问题吗?有什么建议吗 提前谢谢 我们使用的是C2.0Architecture 如何实现“类版本控制”(使用同一类的不同版本),architecture,versioning,Architecture,Versioning,问题是:我们的主课说:每年都有合同变更。添加了一些属性,删除了其他属性。我们不知道明年会是什么样子。它可能会改变很多,或者根本不会改变 另一方面,我们现在有了新的要求。。。必须保存每一份合同的历史记录。每次用户更新合同时,整个对象都必须存储在备份中,例如序列化在表中 当然,我们必须能够读回它。。。一个选择是每年都有一个新的合同类Contract2008,Contract2009 但这将是非常麻烦和丑陋的,因为许多类依赖于契约——事实上,我们每年都必须创建一批新类 有过这种问题吗?有什么建议吗 提
补充:谢谢你的回答。我们现在在问自己,如何在不破坏所有代码的情况下使用字典/XML文件来实现版本控制。在这种情况下,字典似乎很性感:我能想到的第一件事就是我的脑袋。实现一种功能文档。详细说明联系人版本及其包含的属性的列表或XML文档 在契约上运行的每个函数都应该检查是否支持特定的属性和功能 例如:
Contract2008 Capabilities
-----
has Name
has Stipulations
can DoMagic
-----
>
> Contract2009 Capabilities
> -----
> has Name
> has Stipulations
> can DoMagic
> -----
合同类将存储能力文档和一些通用getter setter
Contract
GetCapabilities()
Set(field, value)
Get(field, value)
set和get将在设置或获取值之前检查功能中是否支持该字段
这一定是一种模式或什么的,任何人?我能想到的第一件事就是我的头脑。实现一种功能文档。详细说明联系人版本及其包含的属性的列表或XML文档 在契约上运行的每个函数都应该检查是否支持特定的属性和功能 例如:
Contract2008 Capabilities
-----
has Name
has Stipulations
can DoMagic
-----
>
> Contract2009 Capabilities
> -----
> has Name
> has Stipulations
> can DoMagic
> -----
合同类将存储能力文档和一些通用getter setter
Contract
GetCapabilities()
Set(field, value)
Get(field, value)
set和get将在设置或获取值之前检查功能中是否支持该字段
这一定是一种模式或什么的,任何人?很可能您不必将属性实现为C属性。实际上,您可以将属性存储在某种字典中,并使用Get和Set方法来读取/枚举它们。在这种情况下,您可以每年使用相同的类
如果属性必须是属性,那么我建议每年使用该类构建一个新程序集,并动态加载该程序集。然后,您可以使用反射来查看每个契约对象支持哪些属性。为了让您的生活更轻松,我建议您为不会更改的属性提供一个接口,并使在程序集中标识合同类更简单。很可能您不必将属性实现为C属性。实际上,您可以将属性存储在某种字典中,并使用Get和Set方法来读取/枚举它们。在这种情况下,您可以每年使用相同的类
如果属性必须是属性,那么我建议每年使用该类构建一个新程序集,并动态加载该程序集。然后,您可以使用反射来查看每个契约对象支持哪些属性。为了让您的生活更轻松,我建议您为不会更改的属性提供一个接口,并使在程序集中标识合同类更简单。停止序列化对象。以关系方式存储数据。序列化的目的是为了缩短持续时间,比如说像在网络上传输流一样;不是永久存储
而不是将字段编码到类中;听起来您可能需要更多类似于字典的结构,它可以根据按年份存储的数据库配置值动态地提取字段。然后基于这些值构建一个动态UI。每年都要创建一个新类并测试代码,维护成本似乎不可能高。停止序列化对象。以关系方式存储数据。序列化的目的是为了缩短持续时间,比如说像在网络上传输流一样;不是永久存储 而不是将字段编码到类中;听起来您可能需要更多类似于字典的结构,它可以根据按年份存储的数据库配置值动态地提取字段。然后基于这些值构建一个动态UI。每年都要创建一个新类并测试代码,维护成本似乎高得不可思议