现在的位置: 首页 > 综合 > 正文

软件模式的探讨和分类

2013年08月11日 ⁄ 综合 ⁄ 共 2690字 ⁄ 字号 评论关闭

        建筑大师ChristopherAlexander说:模式是对某一情景(或者场景) 多次出现的问题和对应的解决方案的描述。而GOF四人帮)针对面向对象软件领域经常出现的设计问题提出和描述了23个设计模式,并根据模式的意图分为对象创建用的创建型模式、由对象组合和封装构成的结构型模式、以及涉及算法和行为在对象间职责分配的行为型模式等三大类设计模式,主要用于解决OO软件设计的可扩展性即弹性方面的问题。

        而我们知道软件弹性只是软件产品质量的一个方面,另外软件产品的质量还包括性能、安全、可用性、易用性、可测试性等方面的属性,因此软件设计也要考虑这些方面存在的问题和对应的解决方案(模式)。同时软件产品的产生还包括需求分析和开发、软件架构设计、软件编码、软件测试、软件发布及维护等方面,因此针对这些方面肯定也存在各种问题和解决方案,因此也存在模式。

          因此软件模式可以从软件涉及的问题域进行分类,分为如下模式:

          用于软件需求分析的软件分析模式、软件架构设计模式、软件设计模式、软件编码模式、软件测试模式、软件发布和维护模式等。

            GOF四人组总结的模式都是软件设计方法方面的模式,称为设计模式,也是目前软件领域主要用到的模式。

            上面每个软件过程对应的模式最终都要落实到软件质量属性对应的模式上,如软件设计模式落实到软件质量方面可以进一步细化为:弹性模式、安全模式、性能模式、可用性模式、易用性模式、可测试性模式等模式, GOF四人组提出的模式基本上都是软件弹性方面的模式。

        软件架构模式包括:独立组件(通讯进程、事件系统(隐式调用、显式调用),数据流(批顺序、管道和过滤器),以数据为中心(存储库、黑板),虚拟机(解释程序、基于规则的系统),调用/返回(主程序和子例程、面向对象、分层)等模式。

         另外针对软件特定方面的设计问题也有对应的设计模式,如UI设计模式(DynamicUserInterfacePatternDisableJobRequestsWhileRunningJob
)、实时设计模式(ScheduledTask )、J2EE模式、网站设计模式等。

        模式或解决方案也可以说是战术的总结和模式化,并通常遵循一定的设计原则战术和模式都是控制质量属性的方法,战术更像是一种概念表示,需要用于一定的情境(场景)
实际化为模式,如36计就是用于军事领域的模式 。

          软件质量模式 :

       一、弹性(包括可修改性和可扩展性)方面的战术和模式

               面向对象设计提高软件弹性的设计原则包括:职责分配原则、单一职能原则(SRP )、"开-闭"原则(ocp) 、里氏代换原则(LSP)、接口隔离法则(ISP)、依赖倒转原则(DIP)
迪米特法则,以及合成复用原则和好莱坞原则等。

                 提高可修改性方面大的的战术包括:局部化修改,防止连锁反应,推迟绑定时间

                 局部化修改:语义一致性(责任单一)、预期期望的变化封装变化、泛化模块、抽象通用服务、限制可能的选择。

                 防止连锁反应:信息隐藏、维持现有的接口(适配器,占位程序)、限制通讯路径、使用仲裁者(数据库、发布/订阅模式、  MVC/PAC模式,正面、桥、调停者、策略、代理、工厂模式、经纪人、名称服务器、资源管理器)。

                 推迟绑定时间:运行时注册、配置文件、多态、组建更换、遵守已定义的协议。

                 设计模式: GOF模式

       二  、安全质量方面的战术和模式

             设计原则:最小特权原则

             加密、校验(正确性、完整性)、认证(账户和口令、数字签名和证书、物理和生物特征等)、授权、隔离、限制(暴露、访问),入侵检测、审计追踪。

            安全方面的模式:FacetPattern  、CaretakerPattern

       三、性能(提高系统的吞吐率,处理事件的效率)方面的战术

                通常从资源需求、资源管理、资源仲裁三方面提高性能。

                资源需求:提高资源效率、减少计算开销、管理事件率、控制采样频率、限制执行时间、限制队列大小。

                资源管理:引入并发、维持计算或数据的多个副本、增加可用资源。

                资源仲裁:调度策略(先进先出、固定优先级调度、动态优先级、静态调度策略)。

                提高性能方面的通用设计模式包括:CACHE(本地化、池化),并发(进程、线程、分时处理),异步机制,预处理(预编译、预加载、预存储、预分配、预连接),负载轻量化、简化(使用尽量少的代码和资源),以空间换时间,硬件化,增加可用资源。延迟加载、后期绑定。存储优化,通过脏标记批存储

        四、 可用性战术:

               可用性战术包括错误检测、错误恢复、错误预防方面。

               错误检测(命令/响应、心跳、异常检测和处理)。

               错误恢复:包括检测和恢复和组件重新引入,检测和恢复(表决、主动冗余(热重启),被动冗余(暖重启、双冗余、三冗余),备件),组件重新引入(shadow操作、状态再同步、检测点/回滚)。

               错误预防(从服务中删除、重启、事务、进程监视)。

       五 、可测试性战术:

            记录/回放、接口实现分离(占位程序、组件替换)、特化访问路线/接口(专门用于测试)、内部监视器。

       六、易用性战术:

            分离用户接口

            支持用户主动(取消、撤销、聚合、显示多个视图)

            支持系统主动:维持任务的一个模型、维持用户的一个模型、维持系统的一个模型,便于提供可预测的操作。

                                                                                欢迎转载,转载时请尊重原创注明出处。

                                                          

抱歉!评论已关闭.