軟體工廠是一種工業化的軟體開發方法論,如同工廠與研究所的不同——工廠著重的是工具應用,而研究所著重的是理論實踐一樣——軟體工廠與敏捷開發論也基本對立:它不強調對系統和過程的持續改進,它強調的是高度分工的團隊合作模式,流水線般提供開發週期內所需的資源(如程式碼群組件、工具、實用參考、文檔、正常化的活動),從而保障最終產品的品質和提高開發效率。
軟體工廠的前提
大量實踐的理論(模式)和產品化的工具(可複用架構、開發工具及測試載入器)。
以依賴注入(Dependency Injection)這一非常流行的模式為例,它的基本思想是,通過改變組件之間的依賴關係從而實現更靈活、更有擴充性的系統架構。而微軟提供的Unity Block基於此思想實現,這是一個提供給我們用以實現依賴注入的工具組件。
另外如ASP.NET Membership實現了角色型存取控制、ASP.NET MVC Framework實現了Model-View-Controller分離原則、ADO.NET Entity Framework實現了Object-Relation-Mapping資料訪問模式等等,都是基於一系列實踐模式所提供的開發架構。這些架構加上開發工具、測試載入器(NUnit、xUnit等)、構建部署工具的廣泛應用,為軟體工廠的出現提供了成熟的環境。
豐富的資源
如上段所述,大量軟體開發的設計模式以工具形式存在於軟體工廠中,無形中就為開發人員提供了優秀的架構和設計應用模式。
兩個開發人員,一個能熟練使用ASP.NET MVC架構構建Web應用程式,另一個能熟練基於MVC模式建立Web應用程式,事實上,你並不能就此判斷他們使用各自所長建立的最終產品的設計好壞。
實用參考和文檔、快速上手指南可以解決開發過程中常見的技術問題。
設計和代碼產生器,用於控制碼和應用系統分層結構。
模板,包含大量可複用的代碼。
正常化的開發活動
在軟體工廠中,我們更多的是操作一系列模板,在當前步驟完成當前既定的功能,從而完成應用程式的建立;對每一個開發人員而言,開發活動的自由度將大大降低,但對整個開發過程來說,協作和分工卻更加清晰可控。參見,Web Client Software Factory中一個多層Web應用程式的建立過程:
高度分工化
正因為軟體工廠正常化了開發活動,我們可以讓Team Dev有更清晰的分工界限。例如,可以讓一名進階人員操作設計器,在進行功能分解的同時產生基本代碼,另一名人員使用開發工具,負責在產生的檔案中撰寫實現代碼。因為這些不同的工具均整合在軟體工廠之中為解決方案檔案服務,而不是像從前的項目那樣通過文檔、Visio圖形或UML進行互動。
軟體工廠帶來的挑戰
軟體工廠與敏捷開發,並不存在孰優孰劣的問題。工業化生產帶來的是對管理的更高要求以及技術的歸門別類,對於工廠本身,亦需要持續的改善和思考,最終的目標只有一個:最終產品上實現效率和品質的完美統一,為Team Dev實現更高的產出價值。