2015-11-03 83 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 /切換代碼。

相關問題