多个客户端在同一方法中都需要一些不同的功能

时间:2015-11-03 13:55:35

标签: c# asp.net-mvc model-view-controller

关于以下设置的当前情况的最佳方法是什么;

网站的多个实例 - 每个实例都有自己的SQL数据库。 例如customer1.co.uk,customer2.co.uk -

现在,例如,所有代码都具有相同的代码库,但需要不同的输出或操作,具体取决于客户是谁。

如果我的情景是;

[AccessFilter]
[HttpGet]
public ActionResult Create(){ 
    // Same initial logic.

    IF Customer A(){
        // Do this customers logic
      }
    IF Customer B(){
        // Do this customers logic
      }
   //Same end result or different result.
}

即使此客户希望使用此ViewModel显示此View,但我希望有一个流程不需要太多重复或尝试为每个客户维护许多不同的文件。我想尽可能地为每个客户端特定文件保留不同的发布版本文件夹。

2 个答案:

答案 0 :(得分:2)

我说没有一种最好的方法,一切都取决于,无论你选择什么,它都会有它的优点和缺点。

我对每个客户的要求都大不相同,单独的应用程序可能是一个很好的解决方案,但如果只有一小部分逻辑不同,那么单个应用程序可能会更好。

如果您选择创建一个应用程序,那么尝试将客户端特定代码放入其自己的命名空间或类中可能是个好主意,这样您就不会混淆#&# 34;核心"带有大量if / case / switch代码的代码。

答案 1 :(得分:2)

正如Culme所说,这将取决于您的具体用例。但是,我会说随着微服务和持续部署的兴起,代码中的这种分支(使用注册表,环境变量,web.config,等等):

if Customer A(){
        // Do this customers logic
}
if Customer B(){
        // Do this customers logic
}

不能很好地扩展。您最终会遇到比首先解决的问题更多的问题,并且为每个客户部署特定环境是一件痛苦的事。然后,当你成功部署它们时,你必须记住那里的神奇公式。如果你有一个团队,他们将如何知道所有步骤?

容易发生的是你弄乱了一个环境,突然间他们处于一个完全不同的代码分支上,调试这些问题很痛苦。

在您的情况下,在您的版本控制中创建分支(CustomerA,CustomerB)并以不同方式实现该控制器非常容易。当CustomerA出现并希望向前移动时,它可能也会有所帮助,但CustomerB非常乐意保持原状。