小弟工作8年,6年java系统经验。最近做一个项目,规模不大(3个人一年项目),但甲方要求要有监理公司,公司名具体不方便说出来。
项目使用Velocity1.6.1+Sitemesh2.3+Spring2.5.6+Hibernate3.3.1,层次MVC+LOGIC+DAO,由于项目将来可能访问量大,重做了Session管理(把会话信息存储在Cookie中),以方便负载均衡。cache模块基于接口实现可切换是ehcache还是memcached,将来访问量大,需要多机部署时将切换到memcached。目前系统环境是hp-ux小机,将来访问大时,可用多台hp-ux或多linux pc服务器,项目情况就是这样。
其在我们系统做到80%(做国内政府的项目,需求是一点一点挤出来的,没有一个完整的需求)时提出“设计模式”这个见意,见意我们用他们的给的设计模式重构。
小弟由于“个人能力有限”java设计模式的书也看过几本,但不能理解监理给的“设计模式”,小弟冒着被javaeye扣分的风险发此贴,还请各位大牛帮给把把脉,看看这些“设计模式”在“实际的项目”中是否可行,监理提出了要求,但没具体给出怎样做,也不知道他们要求的这些东西有怎么用 ?
致: SSS公司
事由:
依据《GB/T 19668.5-2007 信息化工程监理规范 第5部分: 软件工程监理规范》规定,监理机构XXX公司对承建单位SSS公司提交的本项目的需求、设计、评审文档进行了审查、评价。(审查文件列表见附件)监理机构发布本文件建议XXX采用设计模式改进软件设计,重构相应代码。
内容:
设计模式是针对软件开发问题的巧妙、通用和可复用的解决方案。通过设计模式组织程序中的对象,使其进行通信不牵涉相互的数据模型和方法,易于编写和修改,提高代码效率,在大型设计中具有不可或缺的关键作用。把设计模式作为一种监理分析工具,我们可以准确地捕捉到设计方案中最重要的部分。
1、 组合模式(公路信息—Composite模式)
将对象组合成树形结构以表示”部分- 整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
XXX服务引用数据中心提供的数据资源。公路系统由若干不同等级公路组成,一条公路包含若干公路设施和相关信息。可以通过component.operation()方法访问公路信息的惟一实例。component对象代表公路信息中资源体系的顶端元素,composite 对象代表公路信息中资源体系的各层元素。
公路信息是一个多层结构,因此它完全符合Composite模式的意图:“将对象组合成树形结构以表示‘部分-整体’的层次结构。Composite模式使得用户对单个对象和组合对象的使用具有一致性。”使用组合模式,简化了现有信息资源的访问方式,预留将来扩充其他资源的余地,
对原数据库设计,仅需增加标识父节点字段即可。
UML图 Composite模式 图 1
2、 代理模式与桥模式(数据中心 -- Proxy与Bridge)
数据中心提供使用者需要跟踪文件系统中的资源的方式。贯穿其整个生命周期,资源一直在发生变化:它们被创建出来,它们的内容被修改,它们被替换成其他的版本,它们被删除,有时还会被重新创建。与资源相关的信息在其整个生命周期中不断发生着变化,但资源本身的身份(唯一标识)是保持不变的。使用者仅仅需要通过某种简单的方式引用资源的惟一标识,而不必关心资源在工作区中的状态——我们不希望被一个很可能已经失效的状态束缚住。
监理机构建议解决这个问题的办法是:只向使用者提供访问资源所需的句柄(handle),而不是提供完整的资源。将Proxy和Bridge 这两个结构型模式加起来,就可以恰如其分地描述这个设计。Proxy模式告诉我们如何控制对一个对象的访问,Bridge模式告诉了我们如何将接口与实现分离,它们中的任何一个都无法单独满足该设计的完整意图。按照《设计模式》中的叙述,这两个模式各自的意图是:
●Proxy—“为其他对象提供一种代理,以控制对这个对象的访问。”
Proxy应用场合:
■远程代理 为一个对象在不同的地址空间提供局部代表,隐藏对象存在于不同地址空间的事实。
■虚拟代理 根据需要模拟开销很大的对象,通过它来存放实例化需要很多资源的真实对象。
■安全代理 控制真实对象访问权限。
■智能指引 当调用真实对象时,代理处理另外一些事。
数据中心符合Proxy应用场合全部要求。
UML图 Proxy模式 图2
●Bridge(又名“Handle/Body”)——“将抽象部分与它的实现部分分离,使他们都可以独立的变化。”
UML图 Bridge模式 图3
3、 访问模式(遍历资源—Visitor模式)
如果手工编码调用members()去遍历资源树,会在使用者程序中造成大量的流程控制代码。可以将这些代码提取到一个visitor对象中。打开《设计模式》,我们看到Visitor模式的意图是“表示一个作用于某对象结构中的个元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。”
UML图 Visitor模式 图4
4、 观察者模式(数据中心跟踪资源的变化——Observer模式)
工作区中的资源会不时发生变化,这可能是因为用户操作了这些资源,也可能是因为重新与本地文件系统进行了同步。不论是哪种情况,对这些资源进行观察的使用者需要立即收到准确的变化信息,这样它们才能相应地更新自己的状态。为了观察资源的变化情况,工作区提供了一个资源监听器,这是Observer模式的一个变体。监听器被注册在工作区上,后者在Observer模式中扮演“被监听目标”(subjece)的角色,当资源发生变化时负责发出通知。
UML图 Observer模式 图5
本文档提供了监理机构提供参考的公路信息设计模式的 C# 代码,vs2008 环境下调试通过。