2009-06-23 77 views
0

我有一家小公司向客戶銷售網站解決方案。這些網站服務於相同的目的;允許客戶發送和安排SMS消息。爲多個客戶部署/管理網站

每個網站都略有不同。例如,1個站點具有地址詳細信息和組名等強制性信息,而另一個站點具有不同的要求,例如記錄用戶的IP地址,但不需要任何地址詳細信息。

所有的網站都是使用LINQ TO SQL構建的,只是網站而不是網絡應用程序。

每個網站在我的服務器上都有自己的數據庫。

每個網站都使用exe來發送消息。該exe是相同的exe文件,但每個網站都有自己的複製和調度程序位於站點的bin目錄中,並使用Windows計劃任務解僱。

每個網站使用相同的Web服務與發送消息並返回響應的中央服務器進行通信。

客戶可以更改ASPX頁面,但不能更改背後的代碼。

目前,我有我的開發機器上的文件結構,上面寫着這樣的:

Client1Dev Client1_Published

Client2Dev Client2_Published

...等

另外,還有輪詢應用程序(一個Windows控制檯應用程序)

當我進行更改時,我將客戶端站點發布到其已發佈的目錄,然後將bin目錄中的DLL複製到生產服務器。

我的問題真的是你會怎麼做管理這些東西?如果客戶端1想要更改,我將更改到開發站點,複製到發佈,然後FTP到生產。

建立新的網站時,這是一場噩夢,因爲在不同的客戶項目中可能會有變化,這對於新客戶可能是有用的。

如果我發現一個錯誤,它是一個真正的噩夢,因爲我需要將所有站點一個一個地更新,以確保錯誤修復不會中斷特定項目。

對此有何建議?

回答

1

源代碼管理,自動化測試。總之,過程。

您需要開發的主線,也許每個客戶端都有一個分支。對客戶分支做出的一些更改想要合併到主分支中,然後分配給其他客戶分支。

您需要運行自動化測試來測試這些更改,而且這些測試可能還需要針對不同的客戶端進行版本控制。

事實上,您可能需要問自己是否值得讓客戶做出如此多的改變。您可能需要限制他們可以進行的更改的數量和種類,以保持您的理智。

0

我使用過類似的設置,這是一場噩夢,沒有簡單的解決方法。

一個選擇是使用svn併爲每個客戶端分支,然後可以跟蹤所做更改的位置並將它們複製到中央主幹和從中央主幹複製它們。這不是「標準分支模式」之一,但我已經看到它與許多客戶端的龐大代碼庫一起使用,並且它工作正常。這取決於您的客戶支付多少維護費用。

就我個人而言,我認爲您最好提供一個[靈活的CMS] [1]併爲每個客戶提供一個單獨的數據庫和主題。這將是一個工作負擔,所以你可能想慢慢推出,但從長遠來看會容易得多。已經在內部和開源CMS的工作「的開源路線似乎有很多好處。

您可以爲每個客戶定製功能都有特定的模塊,使客戶代碼與核心代碼保持良好的分離。同樣,通過這樣做,您可以解決代碼維護問題,因爲cms代碼與客戶特定的代碼是分開的。

我認爲其他海報在談論自動化測試和構建管理時有一個要點,但對於小型網站來說,這是漫長道路的盡頭,我不知道您是否可以證明這一努力的合理性。

+0

CMS方法的問題在於變化是功能性的而不是簡單的表象。 例如,1客戶需要拿一個手機號碼,然後發送一個文本到該號碼來驗證身份,儘管另一個網站沒有。 是否有任何有關如何使用SVN分支的好視頻或一般文檔? – Paul 2009-06-23 15:51:00

0

看看Eric Sink的源代碼控制指南,然後看看Cruise Control.net之類的東西來改進你的構建過程。大多數自動構建工具都可以使用腳本等進行定製,以便在推出代碼之前執行所需的任何定製步驟。

0

艱難的一種,但是一種最小化複雜性的方法可能是在源代碼存儲庫中只有一個分支,然後嘗試按照SOLID中所述混合the Open Closed principle。這樣,應該可以提供客戶請求的更改而不分支源代碼樹。 突然想到的第一個想法是「使用工廠模式」,但我已經學會了在看到任何問題後不會拋出模式的困難方式,但仍然是。