MVC项目 - 两个站点相同的控制器

时间:2016-03-05 19:34:02

标签: c# asp.net-mvc

如何组织我的新项目我处于两难境地。

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

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

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

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

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

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

  3. 第一种方法更清洁,但也会产生大量重复代码,可能是维护噩梦。

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

    这样做有三分吗?

    感谢

3 个答案:

答案 0 :(得分:2)

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

DisplayModeProvider.Instance.Modes.Insert(0, new NewSiteDisplayMode()
        {


            ContextCondition = context => IshkaDisplayMode.IsNewSite(context.Request)

        });

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

干杯

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

詹姆斯

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

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

事实上,这是MVC开发的纯粹本质。