1

我有asp.net MVC項目定製爲只爲一個客戶工作。MVC控制器VS工廠方法

我需要擴展該項目以根據需要與儘可能多的客戶一起工作。

每個客戶都可以決定是否把一些功能或關閉 (在數據庫中定義的第一次增加了新客戶)

我想最好的辦法是什麼:

1)使用包含所需基本功能的基本控制器,並添加擴展基本控制器的新控制器(針對每個新客戶)。 2)只使用一個控制器,並用工廠方法模式構建每個客戶(每個客戶都有自己的具體類)。

3)只使用一個控制器,其保持所有功能,或關閉取決於DB打開功能開關(在DB中的第一次添加新客戶)所定義

感謝

+0

這將是巨大的,如果你能在什麼類型的功能添加更多的細節,開啓/關閉,也許用一個例子,當你說的功能: 1 )您是否有權訪問整個控制器或特定操作?喜歡訪問客戶頁面的權限或編輯客戶的能力等。 或者您的意思是根據客戶設置在視圖中顯示更多/更少的數據?例如爲客戶顯示x和y列,並顯示另一個 –

回答

4

所有這些方法的限制性太強,而且在一定數量的新客戶之後,您要麼複製遍佈各地的代碼,要麼圍繞一個客戶不需要的代碼執行代碼,而是爲另一個客戶執行代碼。

將每個客戶的特定要求作爲通用可重用選項來實施會更好。例如,如果一個客戶有一個帳單部分,請不要使用帳單部分創建一個ThatCustomerController,而是添加帳單角色,添加帳單控制器,然後通過該角色限制對該控制器的訪問。

它可能感覺像更復雜的工作現在,但在一年的時間裏,你會感激靈活性。

非常粗糙的僞代碼示例:

public class GeneralController : Controller 
{ 
    public ActionResult Index() 
    { 
     // Everyone can come here 
    } 
} 

[Authorize(Roles = "Billing")] 
public class BillingController : Controller 
{ 
    public ActionResult Index() 
    { 
     // Only those with the 'billing' role can come here 
    } 
} 
+0

hello steve的所有列,謝謝您的回答。我不需要爲授權創建角色。我創建的每個客戶都應該決定在其獨特的用戶界面中展示哪些功能,基本功能還是按需擴展。 – oren

+0

然後,您可以使用相同的方法,但讓他們通過選項屏幕分配自己的「角色」。現在誰來分配它們並不重要,但它可能稍後使用角色作爲顯示/隱藏的設置的設置是將演示文稿與設置分開的非常靈活的方式。特別是如果你以後得到的客戶只希望具有「設置」角色的用戶能夠更改設置。如果稍後有一位客戶只希望他們的某些用戶訪問帳單,那麼您已經有了一個框架來鎖定它,而不會影響您的任何現有客戶。 –