【发布时间】:2011-11-23 01:05:16
【问题描述】:
我有一个使用 asp.net mvc 1 在 c# 3.5 中构建的现有站点。
网站的某个部分需要额外的行为。基本上需要配置一个基础库中的对象以具有扩展功能。如果已在对象上指定了这些扩展功能,则应在此对象的详细信息页面中公开其他内容/功能。
在用新功能扩展我的对象方面,我正在考虑使用装饰器模式,创建一个带有附加属性等的扩展对象,我可以将其持久化到另一个数据库表中。我会在扩展库中管理所有这些。
我的问题始于控制器/视图级别。所有的控制器动作都已经写好了,并且在我不想修改的基础库中。我可以对这些进行细微的修改 - 但是,不能引入重大更改,并且所有现有功能都应保留,因为该库在其他地方使用。但是,我可以根据需要创建任意数量的新控制器/服务。
为了使事情变得更复杂,站点内的所有现有对象都不需要此扩展功能。在查看对象的详细信息页面时,客户端需要能够选择将这些对象的某些实例转换为扩展类型。
这使我的详细信息页面非常混乱。我现在需要确定对象是否已经扩展,如果没有显示允许用户将其转换为扩展类型的控件。如果对象已被扩展,那么我将不得不在页面上显示它的所有扩展内容。如果功能被隔离到页面的特定部分(是的,一个渲染操作!),这将是好的,但扩展的内容将在页面的各个部分输出。到处加载不同的渲染动作似乎很麻烦,应该只根据它是否是扩展对象来输出不同的内容。
我有一半考虑过做一个 ajax 查询,然后在详细信息页面加载后使用 javascript 动态呈现每个部分。
我不想破坏或更改管理本网站基本功能的现有库。
解决此类问题的最佳方法是什么?
【问题讨论】:
标签: c# asp.net-mvc design-patterns