Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC项目-两个站点相同的控制器_C#_Asp.net Mvc - Fatal编程技术网

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

C# MVC项目-两个站点相同的控制器,c#,asp.net-mvc,C#,Asp.net Mvc,如何组织我的新项目,我左右为难 目前,我有一个杂志风格的网站,用MVC编码,每个页面都有一个自己的控制器和一组视图。在控制器后面,我们有一个用于访问数据库的服务层(作为一个单独的项目)。大多数业务逻辑位于服务层,一些业务逻辑位位于控制器中 我们计划推出一个新网站,该网站将使用第一个网站数据库的副本,其95%的功能与第一个网站相同,但视图/css完全不同 我们有一个非常紧迫的最后期限,我们希望尽可能地重用现有的代码,并使这两个网站超级容易维护 据我所知,我们有两种选择: 要为第二个网站创建一个新项

如何组织我的新项目,我左右为难

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

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

我们有一个非常紧迫的最后期限,我们希望尽可能地重用现有的代码,并使这两个网站超级容易维护

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

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

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

  • 第一种方法要干净得多,但至少它会生成大量重复代码,可能是维护的噩梦

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

    这样做有什么好处吗


    谢谢

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

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

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

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

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


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

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

    DisplayModeProvider.Instance.Modes.Insert(0, new NewSiteDisplayMode()
            {
    
    
                ContextCondition = context => IshkaDisplayMode.IsNewSite(context.Request)
    
            });
    
    现在,如果我需要一个新网站的自定义视图,我只需创建一个现有视图的副本,将NewSite添加到名称中,并将特定的HTML放入其中

    干杯