【问题标题】:MVC project - two sites same controllersMVC 项目 - 两个站点相同的控制器
【发布时间】:2016-03-05 19:34:02
【问题描述】:

我对如何组织我的新项目感到两难。

目前,我有一个用 MVC C# 编码的杂志风格网站,其中每个页面都有自己的控制器和一组视图。在控制器后面,我们有一个用于访问数据库的服务层(作为一个单独的项目)。大部分业务逻辑在服务层,部分业务逻辑在控制器中

我们计划推出一个新网站,该网站将使用第一个网站数据库的副本,其功能与第一个网站 95% 相同,但视图/css 完全不同。

我们的截止日期非常紧迫,我们希望尽可能多地重用现有代码,并使两个网站都超级容易维护。

据我所知,我们有两种选择:

  1. 为第二个网站创建一个新项目,我们需要从头开始重写所有控制器

  2. 向现有网站添加一组新视图,并根据配置开关根据第一个或第二个站点的 url 显示不同的视图。

第一种方法更简洁,但它也会产生大量重复的代码,并且可能是维护的噩梦。

第二种方法将使用相同的控制器(对于 5% 的不同功能,可能会使用双倍的方法)。

有第三个这样做的吗?

谢谢

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    最后我决定通过 DisplayMode 实现自定义视图

    DisplayModeProvider.Instance.Modes.Insert(0, new NewSiteDisplayMode()
            {
    
    
                ContextCondition = context => IshkaDisplayMode.IsNewSite(context.Request)
    
            });
    

    现在,如果我需要新网站的自定义视图,我只需创建现有视图的副本,将 NewSite 添加到名称中并将特定的 HTML 放入其中。

    干杯

    【讨论】:

      【解决方案2】:

      如果对业务逻辑的更改很小并且可以保持兼容,我会使用方法 2。

      实际上还有第三种方法,即为 v2 创建一个源代码控制分支。您可以继续维护 v1 并在必要时将更改集成到 v2。然而,随着时间的推移,随着您的网站漂移,这些集成将变得更加困难。因此,这种方法只有在您有明确的截止日期来摆脱 v1 时才适用。

      根据对数据模型的更改,您可能还需要对数据访问代码进行版本控制。

      【讨论】:

        【解决方案3】:

        詹姆斯,

        您可以使用软件分支、基于主干的开发。

        您的第二种方法很聪明,您只需创建新视图和网站的其余部分(包括业务逻辑),服务器验证就会像魅力一样工作。

        事实上,这就是 MVC 开发的精髓。

        【讨论】:

          猜你喜欢
          • 2015-01-12
          • 2015-08-24
          • 1970-01-01
          • 1970-01-01
          • 2015-08-03
          • 1970-01-01
          • 1970-01-01
          • 2017-01-05
          • 2017-06-05
          相关资源
          最近更新 更多