第二章组织模式

模式不仅依赖于它所包含的更小模式,同时也依赖包含它的更大的模式。它是描述复杂软件的系统方法。

本章的目标是让我们了解以下问题:

1、如何标识模式与模式的关系

2、如何把模式组织成模式集合

3、如何采用不同抽象级别去划分模式

4、如何使用模式解决系统中涉及到的各个方面

5、如何用模式描述解决方案

模式与模式

模式能够描述关系。采用面向对象设计的软件都是有类组成,如果抛开类与类间的关系,模式将什么问题也不能解决。模式把一组类组织成便于管理的模式集合。

我们设计系统时,会发现使用的模式比使用的类都多,那么如何理解模式的作用呢?关键问题是理解项目间的关系。模式与模式的关系比较密切,因此在组织模式是按照关系去组织。

模式集群

我们很容易从一种模式转换到另一种模式上,但我们还不知道如何在系统中使用这些模式,或者应该学习哪些模式。因此这就引起了另一个概念,那就是模式集群。模式集群是涉及特定主题的一组模式的集合。通过模式集群,我们能了解到模式与模式是如何组合,是如何去构建企业级解决方案。模式集群分为5大类,分别是:

集群类型     解决的问题

Web表示     创建动态网站

分布式系统    解决在不同计算机或进程间通信的问题

部署         解决分层应用程序部署到分级硬件上

性能和安全    为某些重要的特定操作提供可靠的保障机制

服务          使用外部服务和对外提供服务

不同级别的抽象

将模式划分为群集方便管理,如构建Web前端只要从Web群集入手就可以。但不同人在项目的不同阶段,感兴趣的方向也不同。如开发人员喜欢Page Control模式,而体系设计人员喜欢分层(Layer)模式。因此我们从抽象级别上对模式进行分类,便于不同人查找自己感兴趣的方向。传统上,使用抽象级别把模式划分为3类,分别是:

体系结构模式:主要描述软件的基础结构,会提前设定子系统或组建间的关系、准则、行为以及职能。例如层(Layer)模式

设计模式:优化子系统或组建间的关系。主要解决在上下中反复出现的问题。例如MVC设计模式、单件(Singleton)模式

实现模式:特定于某种语言或平台的设计模式,如Microsoft.Net的Page Control模式

视点

代码不能全部反应解决方案中的各个方面,比如硬件、网络和部署等方面,因此需要有与设计模式相对应的名称,因此引入视点的概念。视点不描述层次结构,而只是提供看待事情的不同方法。从软件体系上一般分为四个视点,分别是:

1、  数据库视点:是软件的持久层,用于存储数据

2、  应用程序视点:是解决方法的可执行部分,包括域模型、类、程序集、进程等

3、  基础结构视点

4、  部署视点

模式框架

作为参考点和导航助手随每个单独的模式提供描述,同时把各种有意义的子类别组织模式的集合。模式框架有如下特定:

1、  联机事物处理:管理事务处理的数据库子系统,为业务处理提供原子操作

2、  面向对象

3、  分层应用程序

4、  分级分布系统

使用模式描述解决方案

受到约束的模式框架及其所包含的模式提供了足够多的数据点,以便开始使用模式来描述整个解决方案。实际上,第 1 章中的报价示例可以用模式术语来描述。回忆一下,其要求中指定了一个基于 Web 的报价应用程序。描述解决方案体系结构的用户可能会做如下表述:

首先让我们在抽象的体系结构级别看一下这个报价应用程序。从应用程序视点,报价应用程序是面向对象的应用程序,它在逻辑上构造成Three-Layered Services Application. (三层服务应用程序)。从数据库视点,应用程序是基于 OLTP 处理模型的。从基础结构视点,硬件和网络体系结构是基于 Four-Tiered Distribution(四级分布)的,这要求 Web 服务器功能和应用程序服务器功能具有不同的物理级。最后,从部署视点,小组已经基于复杂的 Web 应用程序创建了一个Deployment Plan (部署规划),以便将组件映射到服务器。

这从所有这四个视点向熟悉参考模式的读者简述了解决方案的体系结构。继续向下移动一个抽象级别,可能会看到作者这样描述系统设计:

从应用程序视点,让我们分别考虑 Three-Layered Services Application(三层服务应用程序)的每一层。

表示层是围绕基于Model-View-Controller (MVC) 的 Web 表示框架构造的。 尽管 MVC 将业务层和表示逻辑层分开了,但是每一页都包含大量公共逻辑。为了消除这种冗余,我们使用 Page Controller 来呈现公共头和尾注信息并为用户设置友好的显示名称。

业务层包含客户、报价、订单、系列物品和库存域对象。由于开发速度是一个重要要求,因此这些域对象是使用 Table Module(表模块)实现的。复杂的 Web 应用程序 Deployment Model (部署模型)要求 Web 级和应用程序级分开。因此,这两级通过一个代理程序进行通信。业务实体充当 Data Transfer Objects,用于封装在这两级之间传送的信息。

数据层使用 Data Table Gateway来访问 OLTP 数据库子系统,并使用大量数据访问组件来支持域对象的持久性要求。

从基础结构视点:为了满足业务的操作要求,我们通过添加Load-Balanced Cluster (负载平衡群集)和Failover Cluster(故障转移群集)来基于基本的 Four-Tiered Distribution(四级分布)模型构建。为了满足高级别并发用户的要求,我们在 Web 级中添加了负载平衡功能。为了满足可用性要求,我们在数据库级中添加了群集。

可以继续描述位于同一抽象级别的数据和部署视点。为此,再向下移动一个抽象级别,可能会看到作者这样描述解决方案的实现:

让我们从应用程序视点来查看解决方案。解决方案是使用 Microsoft .NET 技术构建的。表示层基于 ASP.NET 中内置的 Web 表示框架。ASP.NET 使用内置的代码隐藏页功能来简化 Model-View-Controller 的实现。我们使用 ASP.NET 中内置的 Page Controller 机制来实现表示逻辑。业务层中的域对象是 .NET 托管对象。因为表示层和业务层部署在不同的级上,所以我们使用服务器激活对象通过 .NET Remoting 实现 Broker。最后,数据层基于 .NET Framework 中的 ADO.NET 类来提供数据库访问。Table Modules(表模块)和业务实体是使用 ADO.NET 的数据集组件构造的。数据访问组件的其余部分由 Microsoft Application Blocks for .NET 构建块提供。

从基础结构视点:Microsoft SQL Server? 运行在故障转移群集中,用于 OLTP 数据库子系统中。Microsoft 网络负载平衡群集在 Web 服务器之间提供负载平衡。

所有这些会话都经常参考各种模式。最初,这可能有点让人望而却步,但当您了解所使用的模式后,就会认识到即使是一个简短的描述也会让您详细了解系统是如何工作的。请注意,您不必翻阅大量文档或逐步执行无穷无尽的代码行,即可对此有所了解。设想一下在不使用模式的情况下描述解决方案而需涉及到的工作,就不难知道模式所带来的沟通好处。

使用Micrisoft.net设计方案 第二章组织模式的更多相关文章

  1. 使用Micrisoft.net设计方案 第一章 企业解决方案中构建设计模式

    第一章企业解决方案中构建设计模式 我们知道的系统总是由简单到复杂,而不是直接去设计一个复杂系统.如果直接去设计一个复杂系统,结果最终会导致失败.在设计系统的时候,先设计一个能够正常工作的系统,然后在此 ...

  2. ActiveMQ 快速入门教程系列 第二章 发布-订阅者模式实现

    第二章我们会介绍怎样实现一个发布者对多个订阅者的消息传递 Topic和queue的最大区别在于topic是以广播的形式,通知所有在线监听的客户端有新的消息,没有监听的客户端将收不到消息:而queue则 ...

  3. (转)iOS Wow体验 - 第二章 - iOS用户体验解析(2)

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第二部分,其余章节将陆续放出.上一 ...

  4. (转)iOS Wow体验 - 第二章 - iOS用户体验解析(1)

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第一部分,其余章节将陆续放出.上一 ...

  5. 精通Web Analytics 2.0 (4) 第二章:选择你的网络分析灵魂伴侣的最佳策略

    精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第二章:选择你的网络分析灵魂伴侣的最佳策略 在Web Analytics 2.0的新世界秩序中,您必须跳出"单一真理来 ...

  6. CISA 信息系统审计知识点 [第二章. IT治理和管理 ]

    第二章.  IT治理和管理 1.  IT治理.管理.安全和控制框架及标准.指南和实践 IT治理是董事会和执行管理层的职责. IT治理的关键因素:保持与业务的战略一致,引导业务价值的实现. IT治理关注 ...

  7. 《Thinking in C++》学习笔记(一)【第二章】

    第二章 对象的创建与使用 2.1语言的翻译过程 翻译器分为两类:解释器(interpreter)和编译器(compiler). 2.1.1解释器 解释器将源代码转化成一些动作(它可由许多机器指令组成) ...

  8. [A Top-Down Approach][第二章 应用层]

    [A Top-Down Approach][第二章 应用层] 标签(空格分隔): 未分类 网络应用是计算机网络存在的理由 首先从定义几个关键的应用层概念开始 应用程序所需要的网络服务,客户和服务器,进 ...

  9. Android艺术开发探索——第二章:IPC机制(下)

    Android艺术开发探索--第二章:IPC机制(下) 我们继续来讲IPC机制,在本篇中你将会学习到 ContentProvider Socket Binder连接池 一.使用ContentProvi ...

随机推荐

  1. Content-Encoding与Content-Type的区别

    RFC 2616 for HTTP 1.1 specifies how web servers must indicate encoding transformations using the Con ...

  2. 【转载】解决方案:git@github.com出现Permission denied (publickey)

    遇到的问题 今天心血来潮,想将intellij上的项目代码放到GitHub上管理. 在进行添加远程库的时候,出现了:git@github.com出现Permission denied (publick ...

  3. Django 框架入门

    1.创建虚拟环境.(如果你想在你的服务器中运行多个项目,那么装虚拟环境是最好的选择) pip install virtualenv pip install virtualenvwrapper 安装好后 ...

  4. eas之事件

    选择事件 选择事件是在选择块发生变化后发出.table.addKDTSelectListener(new KDTSelectListener(){    public void tableSelect ...

  5. [模板]FFT

    郝神并没有令我明白这个. 但是巨神的题解太强了. #include <iostream> #include <complex> #include <cmath> # ...

  6. react-native页面间传递数据的几种方式

    1. 利用react-native 事件DeviceEventEmitter 监听广播 应用场景: - 表单提交页面, A页面跳转到B页面选人, 然后返回A页面, 需要将B页面选择的数据传回A页面. ...

  7. 2018 noip 考前临死挣扎

    基础算法 倍增 贪心 分块 二分 三分 数据结构 线段树 对顶堆 数学 质数 约数 同余 组合 矩阵乘法 图论 二分图判定以及最大匹配 字符串 Tire树 KMP 最小表示法 Hash Manache ...

  8. Spring Boot学习总结(3)——SpringBoot魅力所在

    使用Java做Web应用开发已经有近20年的历史了,从最初的Servlet1.0一步步演化到现在如此多的框架,库以及整个生态系统.经过这么长时间的发展,Java作为一个成熟的语言,也演化出了非常成熟的 ...

  9. 通用 mapper

    一.为什么需要通用 mapper 插件 通用 mapper 插件可以自动的生成 sql 语句. 虽然 mybatis 有逆向工程,可以直接生成 XxxMapper.xml 文件,但是这种生成的方式存在 ...

  10. (19)Spring Boot 添加JSP支持【从零开始学Spring Boot】

    [来也匆匆,去也匆匆,在此留下您的脚印吧,转发点赞评论: 您的认可是我最大的动力,感谢您的支持] 看完本文章您可能会有些疑问,可以查看之后的一篇博客: 81. Spring Boot集成JSP疑问[从 ...