2013-10-25 74 views
0

我的組織有一個.NET解決方案(C#MVC),我們正努力保持解決方案的可重用性,但同時可以擴展。構建我們的解決方案和建議

我們有一個有4個客戶

A,B,C,d

每個客戶都需要一個網站和每一個網站是非常非常相似的說90%的相似性。因此,我們創建了一個包含數據層,核心,服務和Web層(包括控制器/幫助程序/映射/驗證)的基礎模板。所有的客戶都會使用這個模板。客戶端不會共享代碼的唯一部分將是標記和將應用於該客戶端的主題。即使腳本/基地的CSS將在客戶端之間共享。

到目前爲止,這已經工作了大約7個月的時間。

客戶A和B已經部署並投入生產。

我們目前正在研究客戶端C,客戶端D尚未實施。

在客戶端C上工作時,客戶端A和B也需要修改/修改功能等。但是因爲我們正在處理客戶端C,所以模板並不總是「生產就緒」,因此客戶端A和B與未經測試的代碼。我們現在直接在客戶端C中直接實現大部分功能,以避免對模板進行更改。

當然,一個簡單的選擇是在分支上進行分支和工作,但因爲我們被迫使用TFS,所以很難。我們很可能只是在那裏分支和工作,但是有沒有其他建議(信息來源)可以閱讀其他人如何解決這個問題?

回答

0

從我的經驗來看,分支是讓客戶解決方案更加獨立於彼此的最佳方式。此外,您可以決定何時將更改合併到客戶解決方案中,並且不會被迫發佈代碼,這些代碼不會隨着客戶的錯誤修正而生產。

直接的方法是讓解決方案中的所有項目,併爲包含源代碼中完整解決方案的每個客戶創建一個分支。通過這種方式,您可以對完整的代碼進行客戶特定的更改。源樹將類似於此:

  • Branch1的
    • 解決方案
      • 項目1
      • 項目2
  • 店2
    • 解決方案
      • 項目1
      • 項目2

如果你想介紹的共享基礎組件和客戶特定的代碼之間的更大的分離,你可能會認爲有關創建爲一個單獨的解決方案基本組件並且具有客戶特定的解決方案和項目參考二進制文件。在確保基本組件(遲早)的變更以同樣的方式整合到客戶項目中的同時,這要複雜得多,而且需要付出相當大的努力。此外,由於您無法對基本組件進行客戶特定更改,因此您的靈活性較低。只有當您期望很多客戶項目時,我纔會推薦這樣做,因爲這樣可以確保您擁有經過測試的基本組件,這些組件對於所有客戶都是一樣的。 您的解決方案將樹看起來是這樣的:

  • 基本組件根文件夾
    • Base組件分支
      • 解決方案
        • 項目
  • 基本組件二進制輸出(也許在你的源代碼控制的公共區域)
  • 客戶解決方案的根文件夾
    • 分公司1
      • Base組件文件夾(從基礎組件二進制輸出支,如果要合併使用的組件爲客戶新版本)
      • 解決方案
        • 項目
    • 科...

當然你也可以混合使用這兩種方法的(所描述的那些都是極端情況)。我希望這有幫助。