设计垂直切片的意义

Rod Johnson在其著名的《J2EE Development without EJB》强调:“一定要在项目初期就开发一个垂直切片(vertical slice)来验证应用的架构。”。对于软件产品开发而言,这种观点其实是具有普遍意义的,而不单纯是基于Java的应用。与原型不同,所谓垂直切片是应用系统中的一个用例(use case)子集,例如,在构建一个电子商务网站时,搜索引擎或者商品目录都可作为一个垂直切片。垂直切片可以顺序验证所采用的Java EE技术是否适用。例如,若用户使用浏览器访问运行着Servlet的Java应用服务器,Servlet又与EJB交互以访问后台数据库(当然,使用Hibernat或JDO的效果会远远好于entity bean的对象持久化方案),并将访问结果以HTML的方式传送给浏览器。开发一个初始的垂直切片有如下益处:

1. 获得开发Java EE软件的经验。通过开发一个端对端的垂直切片,开发团队成员能够学会如何使用各项将被实际运用的技术和工具,尽早发现并解决问题,例如对O/R映射不熟悉的工程师,可以借机详细了解一下Hibernate的工作原理,或者如何定义映射文件。

2. 获得部署Java EE软件的经验。工程师在第一次进行这样的部署工作时难免是有些困惑的,尤其是面临一个复杂的分布式应用时。通过几个Web服务器、应用服务器、数据库服务器等等结点的安装与配置,工程师将明白如何将一个初始的垂直切片进一步拓展完成整个系统的部署。

3. 降低潜在的风险。在开发一个垂直切片的过程中,开发人员能够渐渐理解怎样整合各种技术,消除未来的系统集成隐患。

4. 向投资者证明系统开发过程的有效性。我们看到了太多关于投资者对软件开发团队失去耐心、失去信任的案例,事实上绝大多数软件工程师都会经历类似的事情。因此,我们需要给投资者展示一下我们在满足客户需求、技术开发、项目管理、成本控制等诸多方面的能力,让投资者保持甚至增强对我们的信任,尤其是当项目遇到资金危机时,一个运作良好的垂直切片也许就是那根最后的救命稻草。

5. 验证系统设计的弹性。垂直切片是系统中真实运行的一部分,而且任何系统都会经历需求变更的过程,那么在系统负载增加或者需求变更时,垂直切片能否适应这种变化将成为衡量整个系统伸缩性的风向标。因此,在进行系统其他部分的设计之前,需要对垂直切片要进行足够强度的测试,这将有效地减少风险,尤其是对一些关键技术尚存疑问之时(例如对象模型是否有效工作?)。

6. 尽早选择合适的设计模式,并融入系统设计。通常,一个具体的应用不会把Gang of the Four的23个设计模式统统使用一遍,似乎也没有这样的必要。但在Java EE系统中一些基本的设计模式需要在垂直切片中得到验证,例如MVC模式。这将有助于我们发现并确定一条合理的技术路线。


一个垂直切片设计完成之后,是否需要将之进一步完善使其成为未来系统的一部分,还是直接弃用它,这取决于垂直切片本身的质量如何。若质量不高,弃用也是正常的,毕竟我们已经在垂直切片的开发过程中得到足够的收益。当然,若垂直切片的质量足够高,以此为基础进一步开发其余部分也是明智的选择。


一个初始的垂直切片OK之后,便可以着手开发其他垂直切片。每一个垂直切片的都将经历一个缩小版的分析、设计、编码、测试、部署生命周期。记住,一定要及时让客户知道我们在做什么,倾听他们的反馈意见,这对项目的正常进行是至关重要的。

猜你喜欢

转载自zhykhs.iteye.com/blog/341833