软件开发之路:垂直开发模式(VDP)
时间:2010-09-19 来源:阿全
第一节 指导思想
俗话说‘没有砖瓦,何以建大厦’,再庞大的再复杂的事物都是有小的简单的事物组成,要解决复杂问题,第一步就是分解问题,把一个大问题分成若干小问题,分而治之,各个击破,最终解决大问题。
软件开发是一个系统工程,也是一个极其复杂的问题,早期,个人英雄辈出,单打独斗:通常一个项目按一个模块一个人来完成开发工作,如图1-1。后来,应用越来越广泛,要解决的问题越来越复杂,团队开发思想出现,追求协同作战:把一个项目按业务特征分成若干模块,由不同人来分担模块的开发工作,通过函数接口把各模块整合成一个系统,如图1-2。再后来,分层开发思想出现,科学定位的呼声高涨,可谓百家争鸣:一般按项目(如图1-3)或按模块(如图1-4)划分为界面层(UI,即展现层)、逻辑层(BLL)和数据访问层(DAL)。
按项目划分依据是功能特征,比如都是处理界面的、实现业务逻辑的,负责存取数据的代码放到同一层次,是横向的,水平方向的开发(如图1-3),这种层次化的开发模式称为横向开发、水平开发。
按模块划分的依据是业务特征,比如用户管理、日志管理、报表管理等每个模块都有自己的界面层、业务逻辑层和数据访问层,是按纵向的,垂直方向的开发(如图1-4),这种先模块化后层次化的开发模式称为纵向开发、垂直开发。
垂直开发包含了横向开发的精髓(对比图1-3和图1-4),更好的做到科学定位、合理分工,不但能协同作战,也提高了精确打击的能力,是本文推荐的开发模式。
第二节 实施方案
垂直开发把对程序结构的关注从项目转移到模块,每个模块有固定的层,也有自己特有的层,本文倡导把一个模块分为契约层、领域层、构建层、控制层和界面层等,每个层一般为独立的程序集,图2-1表达了层间基于契约粘合的组织关系。
契约层贯穿整个过程,是其他层次开发的基础,从这个意义上讲,是在面向契约编程,契约就是合同,而其他层次就是根据自己的职责履行合同,然后基于契约组成模块,集成为一个系统。
第三节 开发演练
在D:\Projects目录下以项目为单位组织开发目录环境,并以项目英文名建项目根目录,分别放置调试(bin)、发布(lib)、文档(doc)、源代码(src),工具(tools)等其他子目录,如图3-1。
(图3-1)
Examples(项目名)
bin(调试目录,所有Debug版程序集输出到本目录)
doc(文档目录,存放项目相关的文档资料)
lib(发布目录,所有Release版程序集输出到本目录,模块引用模块外部程序集到本目录)
src(源代码目录,所有源代码按模块组织子目录存放到本目录下)
tools(工具目录,存放与项目相关的三方工具)
在源代码目录以模块名建模块根目录,并独立创建解决方案和各层项目,引用本模块解决方案包含的项目输出程序集时通过引用项目方式,引用其他程序集到发布目录(lib)引用,以安全管理为例,如图3-3。
(图3-3)
Security(以模块名为模块的解决方案目录,如安全:Security)
Builder(本模块构建层项目目录)
Contract(本模块契约层项目目录)
Controllers(本模块控制层项目目录)
(图3-4)
Domain(本模块领域层项目目录)
Model(本模块领域层域对象目录,这里可引入ORM:Hibernate、ibatis、XPO…)
Service(本模块领域层服务对象目录,放置类名如XxxxxService的服务类文件)
Manager(领域层项目根目录一般放置类名如XxxxxManager的代理类源代码文件)
Validation(本模块数据验证对象目录,如XxxxXxxxValidator)
Tests(本模块单元测试项目目录,一般的类签名为XxxxxServiceTest)
第四节 关键技术
成功实施垂直开发的关键在于必须完成基础框架建设,提供以下七大服务:
-
对象构建服务,能通过参数化属性值和创建方式实现对象初始化对象转换服务,能通过参数化类型实现值对象和域对象相互转换契约声明服务,能通过参数化值对象类型派生从公共服务接口新的服务接口能力共享服务,能通过参数化值对象和域对象类型从公共服务派生新的服务数据验证服务,能通过参数化值对象实例实现数据有效性验证数据适配服务,能通过参数化域对象类型实现域对象持久化系统集成服务,能通过参数化模块信息实现功能安装和卸载
第五节 相对优势
总体上,垂直开发模式具有六大优势:更好的促进一个交流、支持两个开发、应对三个变化。
-
更好的促进技术交流,契约就是各方沟通的桥梁,开展工作的依据更好的支持持续开发,物理逻辑层次结构清晰明了,易于维护和新增功能更好的支持团队开发,可以纵向,也可以横向组建开发团队,甚至合纵连横更好的应对需求变化,契约是相对很稳定的,需求的变化大多只是领域层的变化更好的应对系统变化,通过拆分、整合的方式,能快速的重组新系统或抽取子系统更好的应对部署变化,各层为独立程序集,面向契约编程,能快速的实现分布式部署
第六节 参考知识
-
垂直管理网格化管理属地管理横向管理面向接口编程面向对象编程(OOP)设计模式(GOF、MVC、SOA)依赖注入(DI/IoC)面向方面编程(AOP)领域驱动开发(DDD)测试驱动开发(TDD)对象关系映射(ORM)Spring.NETNHibernateASP.NET MVC
原文地址:http://blog.sina.com.cn/s/blog_6c85be4f0100l9rr.html 软件开发之路:垂直开发模式(VDP)
相关阅读 更多 +