在保持基本库功能的同时扩展现有网站功能的最佳方法?

时间:2011-11-21 11:25:51

标签: c# asp.net-mvc design-patterns

我使用asp.net mvc 1在c#3.5中创建了现有的站点。

网站的某个部分需要其他行为。基本上,需要配置一个基础库中的对象以具有扩展功能。如果已在对象上指定了这些扩展功能,则应在此对象的详细信息页面中公开其他内容/功能。

在使用新功能扩展我的对象方面,我考虑使用装饰器模式,创建具有附加属性等的扩展对象,我可以将其保存到另一个数据库表。我会在扩展库中管理所有这些。

我的问题始于控制器/视图级别。所有控制器操作都已编写,并且位于我不想修改的基本库中。我可以对这些进行微小的修改 - 但是,不能引入任何重大更改,并且应该在库在其他地方使用时维护所有现有功能。但是,我可以创建尽可能多的新控制器/服务。

为了使事情变得更复杂,站点内的所有现有对象都不需要此扩展功能。在查看对象的详细信息页面时,客户端需要能够选择将这些对象的某些实例转换为扩展类型。

这使我的详细信息页面非常混乱。我现在需要弄清楚对象是否已经被扩展,如果没有显示允许用户将其转换为扩展类型的控件。如果对象已被扩展,那么我将不得不将所有扩展内容显示在页面上。如果功能被隔离到页面的特定部分(yay,一个renderaction!),这将是oki,但扩展内容将在页面的各个部分输出。在任何地方做一堆不同的渲染似乎很乱,它应该只根据它是否是一个扩展的对象输出不同的内容。

我一半考虑做一个ajax查询,然后在加载详细信息页面时使用javascript动态呈现每个部分。

我不想破坏或更改管理此站点基本功能的现有库。

解决此类问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

您是否可以创建与现有功能相匹配的界面。然后使用新功能实现接口,并使用工厂加载所需的任何一个。

我确实知道这是代码更改,但新功能可能在一个单独的项目中,工厂和界面不会对代码进行大规模更改。

只是一个想法