浅谈软件工厂
软件工厂是一种工业化的软件开发方法论,如同工厂与研究所的不同——工厂着重的是工具应用,而研究所着重的是理论实践一样——软件工厂与敏捷开发论也基本对立:它不强调对系统和过程的持续改进,它强调的是高度分工的团队合作模式,流水线般提供开发周期内所需的资源(如代码组件、工具、实用参考、文档、规范化的活动),从而保障最终产品的质量和提高开发效率。
软件工厂的前提
大量实践的理论(模式)和产品化的工具(可复用框架、开发工具及测试工具)。
以依赖注入(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应用程序的创建过程:
高度分工化
正因为软件工厂规范化了开发活动,我们可以让开发团队有更清晰的分工界限。例如,可以让一名高级人员操作设计器,在进行功能分解的同时生成基本代码,另一名人员使用开发工具,负责在生成的文件中撰写实现代码。因为这些不同的工具均集成在软件工厂之中为解决方案文件服务,而不是像从前的项目那样通过文档、Visio图形或UML进行交互。
软件工厂带来的挑战
软件工厂与敏捷开发,并不存在孰优孰劣的问题。工业化生产带来的是对管理的更高要求以及技术的归门别类,对于工厂本身,亦需要持续的改善和思考,最终的目标只有一个:最终产品上实现效率和质量的完美统一,为开发团队实现更高的产出价值。