【问题标题】:Best way to extend existing website functionality while maintaining the functionality of base libraries?在保持基础库功能的同时扩展现有网站功能的最佳方式?
【发布时间】:2011-11-23 01:05:16
【问题描述】:

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

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

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

我的问题始于控制器/视图级别。所有的控制器动作都已经写好了,并且在我不想修改的基础库中。我可以对这些进行细微的修改 - 但是,不能引入重大更改,并且所有现有功能都应保留,因为该库在其他地方使用。但是,我可以根据需要创建任意数量的新控制器/服务。

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

这使我的详细信息页面非常混乱。我现在需要确定对象是否已经扩展,如果没有显示允许用户将其转换为扩展类型的控件。如果对象已被扩展,那么我将不得不在页面上显示它的所有扩展内容。如果功能被隔离到页面的特定部分(是的,一个渲染操作!),这将是好的,但扩展的内容将在页面的各个部分输出。到处加载不同的渲染动作似乎很麻烦,应该只根据它是否是扩展对象来输出不同的内容。

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    我确实意识到这是一个代码更改,但新功能可以在一个单独的项目中,工厂和接口不会对代码进行重大更改。

    只是一个想法

    【讨论】:

    • 嗯,视图不是必须根据具体情况而不是接口来工作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-08-05
    • 1970-01-01
    相关资源
    最近更新 更多