文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>软件开发之路:垂直开发模式(VDP)

软件开发之路:垂直开发模式(VDP)

时间:2010-09-19  来源:阿全

第一节 指导思想

俗话说‘没有砖瓦,何以建大厦’,再庞大的再复杂的事物都是有小的简单的事物组成,要解决复杂问题,第一步就是分解问题,把一个大问题分成若干小问题,分而治之,各个击破,最终解决大问题。

软件开发是一个系统工程,也是一个极其复杂的问题,早期,个人英雄辈出,单打独斗:通常一个项目按一个模块一个人来完成开发工作,如图1-1。后来,应用越来越广泛,要解决的问题越来越复杂,团队开发思想出现,追求协同作战:把一个项目按业务特征分成若干模块,由不同人来分担模块的开发工作,通过函数接口把各模块整合成一个系统,如图1-2。再后来,分层开发思想出现,科学定位的呼声高涨,可谓百家争鸣:一般按项目(如图1-3)或按模块(如图1-4)划分为界面层(UI,即展现层)、逻辑层(BLL)和数据访问层(DAL)。

按项目划分依据是功能特征,比如都是处理界面的、实现业务逻辑的,负责存取数据的代码放到同一层次,是横向的,水平方向的开发(如图1-3),这种层次化的开发模式称为横向开发、水平开发。

按模块划分的依据是业务特征,比如用户管理、日志管理、报表管理等每个模块都有自己的界面层、业务逻辑层和数据访问层,是按纵向的,垂直方向的开发(如图1-4),这种先模块化后层次化的开发模式称为纵向开发、垂直开发。

  如果把项目看成是一个‘大矩形’如图1-1,按模块垂直划分层次后变成一个‘矩阵’或者‘网格’如图1-4,这样就把解决‘大矩形’的问题转化为解决若干处于不同层次的‘小矩形’的问题,把解决‘网格’的问题转化为解决若干‘单元格’的问题,所以垂直开发也可以叫做矩阵开发或网格化开发。

垂直开发包含了横向开发的精髓(对比图1-3和图1-4),更好的做到科学定位、合理分工,不但能协同作战,也提高了精确打击的能力,是本文推荐的开发模式。

第二节  实施方案

垂直开发把对程序结构的关注从项目转移到模块,每个模块有固定的层,也有自己特有的层,本文倡导把一个模块分为契约层、领域层、构建层、控制层和界面层等,每个层一般为独立的程序集,图2-1表达了层间基于契约粘合的组织关系。

(图2-2 项目程序结构)

契约层贯穿整个过程,是其他层次开发的基础,从这个意义上讲,是在面向契约编程,契约就是合同,而其他层次就是根据自己的职责履行合同,然后基于契约组成模块,集成为一个系统。

第三节 开发演练

在D:\Projects目录下以项目为单位组织开发目录环境,并以项目英文名建项目根目录,分别放置调试(bin)、发布(lib)、文档(doc)、源代码(src),工具(tools)等其他子目录,如图3-1。

 

(图3-1)

 

(图3-2)

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)

第四节 关键技术

成功实施垂直开发的关键在于必须完成基础框架建设,提供以下七大服务:

  • 对象构建服务,能通过参数化属性值和创建方式实现对象初始化
  • 对象转换服务,能通过参数化类型实现值对象和域对象相互转换
  • 契约声明服务,能通过参数化值对象类型派生从公共服务接口新的服务接口
  • 能力共享服务,能通过参数化值对象和域对象类型从公共服务派生新的服务
  • 数据验证服务,能通过参数化值对象实例实现数据有效性验证
  • 数据适配服务,能通过参数化域对象类型实现域对象持久化
  • 系统集成服务,能通过参数化模块信息实现功能安装和卸载

第五节 相对优势

(图5-1 项目程序结构)

总体上,垂直开发模式具有六大优势:更好的促进一个交流、支持两个开发、应对三个变化。

  • 更好的促进技术交流,契约就是各方沟通的桥梁,开展工作的依据
  • 更好的支持持续开发,物理逻辑层次结构清晰明了,易于维护和新增功能
  • 更好的支持团队开发,可以纵向,也可以横向组建开发团队,甚至合纵连横
  • 更好的应对需求变化,契约是相对很稳定的,需求的变化大多只是领域层的变化
  • 更好的应对系统变化,通过拆分、整合的方式,能快速的重组新系统或抽取子系统
  • 更好的应对部署变化,各层为独立程序集,面向契约编程,能快速的实现分布式部署

第六节 参考知识

  • 垂直管理
  • 网格化管理
  • 属地管理
  • 横向管理
  • 面向接口编程
  • 面向对象编程(OOP)
  • 设计模式(GOF、MVC、SOA)
  • 依赖注入(DI/IoC)
  • 面向方面编程(AOP)
  • 领域驱动开发(DDD)
  • 测试驱动开发(TDD)
  • 对象关系映射(ORM)
  • Spring.NET
  • NHibernate
  • ASP.NET MVC

原文地址:http://blog.sina.com.cn/s/blog_6c85be4f0100l9rr.html 软件开发之路:垂直开发模式(VDP)

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载