2015-11-03 40 views
3

什么是当前情况下有关以下设置的最佳方法;多个客户都需要一些不同的功能在同一方法

网站的多个实例 - 每个实例都有自己的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. 
} 

甚至远,这个客户想要显示由此看来,这个视图模型,但我希望有,并不需要太多的重复或试图保持很多关于各个不同文件的过程顾客。如果可能的话,我想尽量避免为每个客户端特定文件设置不同的发布版本文件夹。

+5

你应该看看[策略模式](https://en.wikipedia.org/wiki/Strategy_pattern) –

+0

@MatiasCicero我会考虑这一点。干杯 – KyleK

回答

2

正如Culme所说,这将取决于您的确切用例。不过,我会说,用微服务和持续部署的崛起,这种在你的代码分支(使用注册表,环境变量,web.config中,无论):

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

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

什么容易的情况是,如果你陷入困境的环境,突然他们是在代码完全不同的分支,和调试这些问题是一种痛苦。

在你的情况,这是很容易只作分支(CustomerA,CustomerB)在你的版本控制和不同的方式实现一个控制器。当CustomerA出现并希望向前迁移时,它也可能会有所帮助,但CustomerB非常乐意留在原地。

2

我会说没有一个统一的最好的方法,这一切都取决于,也不管你选择什么它都会有它的优点和缺点。

我的要求是为每一个客户巨大的差别,不同的应用程序可能是一个很好的解决方案,但如果仅仅是逻辑的次要部分是不同的,你很可能会用一个单一的应用程序更好。

如果您选择创建一个应用程序,尝试通过将特定于客户端的代码放入其自己的名称空间或类中来分离它可能是一个好主意,因此您不要将“核心”代码与大量如果/ case /切换代码。

相关问题