第一章企业解决方案中构建设计模式

我们知道的系统总是由简单到复杂,而不是直接去设计一个复杂系统。如果直接去设计一个复杂系统,结果最终会导致失败。在设计系统的时候,先设计一个能够正常工作的系统,然后在此基础上逐步扩展。而一个好的企业设计方案就是由一些短小、简单、可靠、有效的并能够解决问题的机制组成。由这些短小精悍的机制进行组合,形成复杂的系统。而这些机制就设计模式。设计模式就是能够记录这些机制的一些描述。

企业级业务解决方案一般是复杂、性能要好、可扩展性好以及容易维护和可伸缩性强,而设计模式可以帮我们解决这些问题。

设计模式具有以下特性:

1、  记录正常工作的简单机制

2、  形成通用分类和词汇,方便开发人员和设计人员进行交流和沟通

3、  描述解决方案

4、  可以最大程度的重用

5、  获取经验丰富的开发人员的知识,并用目录的形式进行呈现

通常设计模式要解决的问题是在上下文中反复出现的问题,并根据具体情况给出指导性建议。

举例如下:

单件设计模式(Singleton)

上下文中出现的问题:某些类型的数据,在系统执行期间有且只能有一个实例,并且在全局范围内可以共享。

解决方法:通过控制类的实例生成方法,来控制实例的访问。

案例:

设计一个报价系统,其中有一个报价管理功能,其它报价功能与它协作的过程中,需要保持该报价管理功能实例的唯一性。

解决方法:设计一个QuoteManager类,让其构造函数私有化,在类内部自己生成实例并存储在静态变量中,供其它实例调用。

Public class QuoteManager
{
Private static QuoteManager quoteManager=null;
Private QuoteManager(){}
Public static QuoteManager GetInstance()
{
//该设计适用于单线程应用程序
if(quoteManager==null)
{
quoteManager=new QuoteManager();
}
return quoteManager;
}
}

模式与模式应用程序的区别:模式提供的是一个通用的解决方案,而模式程序是针对具体业务进行设计的解决方案。

层设计模式(Layer)

上下文:希望把一个大型复杂系统进行分解,方便管理复杂事物

解决方法:通过分层进行解决,把层作物高级抽象级别进行组织业务

分层原则:

1、  把相同级别的抽象元素集中在同一层

2、  层内保持高内聚,层间弱依赖

分层作用:

1、  在设计上,层间是通过类进行协作,把对源代码修改的影响限制在局部,而不是贯穿整个系统设计

2、  在运行期间,单个组件可以和其它组件进行通信,把这种影响限制在局部

3、  更大程序的提高重用性

传统分层模式结构如下:

三层分层模式结构如下:

三层服务模式结构如下:

案例:

比如设计一个报价系统,其结构为:

模式与模式应用程序的区别:模式提供的是一个通用的解决方案,而模式程序是针对具体业务进行设计的解决方案。

从上述可以看出其优化顺序为:

处理上述分层模式结构外,还有以下多种方式:

使用Micrisoft.net设计方案 第一章 企业解决方案中构建设计模式的更多相关文章

  1. 使用Micrisoft.net设计方案 第二章组织模式

    第二章组织模式 模式不仅依赖于它所包含的更小模式,同时也依赖包含它的更大的模式.它是描述复杂软件的系统方法. 本章的目标是让我们了解以下问题: 1.如何标识模式与模式的关系 2.如何把模式组织成模式集 ...

  2. 第一章 企业项目开发--maven+springmvc+spring+mybatis+velocity整合

    说明:本系列文章主要是对自己在一家大型互联网公司实习的过程中对所学知识的总结!参与的是实际中使用的上线项目. 代码的github地址:https://github.com/zhaojigang/ssm ...

  3. windows核心编程---第一章 谈谈windows中的错误处理机制

        我们写的函数会用返回值表示程序执行的正确与否,使用void,就意味着程序一定不会出错.Bool类型标识true时为真,false时为假.其他类型根据需要可以定义成不同意义.       Win ...

  4. 第一章:eclipse 中修改字体大小和编码格式

    eclipse 中修改字体大小的步骤: 1. 在 eclipse 的工具栏中,找到 weindows 下面的 preferences 2. 在 preferences 的 输出 font ,在 Bas ...

  5. 第一章 用HTML5中的结构元素构建网站

    1.当一个容器需要直接定义样式或通过脚本定义行为时,推荐使用div元素而非section元素. 2.section是需要标题的,而nav或aside没有标题也是可以的. 3.html5轮廓工具 htt ...

  6. 第一章 HTML+CSS(中)

    4.域元素(form表单.textarea文本域.fieldset域集合.input使用) 案例 表单 用户名: 密码: 昵称: 你喜欢的水果有? 苹果 黄瓜 香蕉 请选择性别 男 女 请选择你要的网 ...

  7. [Python编程实战] 第一章 python的创建型设计模式1.1抽象工厂模式

    注:关乎对象的创建方式的设计模式就是“创建型设计模式”(creational design pattern) 1.1 抽象工厂模式 “抽象工厂模式”(Abstract Factory Pattern) ...

  8. 【第一章】 第一个spring boot程序

    环境: jdk:1.8.0_73 maven:3.3.9 spring-boot:1.2.5.RELEASE(在pom.xml中指定了) 注意:关于spring-boot的支持, 最少使用jdk7(j ...

  9. 第一章 第一个spring boot程序

    环境: jdk:1.8.0_73 maven:3.3.9 spring-boot:1.2.5.RELEASE(在pom.xml中指定了) 注意:关于spring-boot的支持, 最少使用jdk7(j ...

随机推荐

  1. 西门子Step7中DB块结构导出

    Step7 通过变量表可以导出内存M地址和I,Q,T,C地址的变量,以及DB块的名称.怎么导出DB块的内部结构结构呢.即如何导出结构内的定义呢? 可以通过“选择某个DB块”,通过菜单命令“File&g ...

  2. JSP_内置对象_请求转发和请求重定向的区别

    请求重定向:客户端行为,response.sendRedirect(),从本质上将等同与两次请求,前一次请求request对象不会保存,地址栏的URL地址会改变. 请求转发:服务器行为,request ...

  3. 团体程序设计天梯赛-练习集-L1-040. 最佳情侣身高差

    L1-040. 最佳情侣身高差 专家通过多组情侣研究数据发现,最佳的情侣身高差遵循着一个公式:(女方的身高)×1.09=(男方的身高).如果符合,你俩的身高差不管是牵手.拥抱.接吻,都是最和谐的差度. ...

  4. PAT_A1150#Travelling Salesman Problem

    Source: PAT A1150 Travelling Salesman Problem (25 分) Description: The "travelling salesman prob ...

  5. appium的等待

    在自动化过程中,元素出现受网络环境,设备性能等多种因素影响.因此元素加载的时间可能不一致,从而会导致元素无法定位超时报错,但是实际上元素是正常加载了的,只是出现时间晚一点而已.那么如何解决这个问题呢? ...

  6. grpc-web与react的集成

    很久没写总结了,在这里跟大家分享一下自己踩的坑,同时也方便自己多记忆下. 大致流程: 使用create-react-app脚手架生成react相关部分,脚手架内部会通过node自动起一个客户端,然后和 ...

  7. [luogu1090 SCOI2003] 字符串折叠(区间DP+hash)

    传送门 Solution 区间DP,枚举断点,对于一个区间,枚举折叠长度,用hash暴力判断是否能折叠即可 Code #include <cstdio> #include <cstr ...

  8. Linux循环

    echo 'for循环' do echo $i done

  9. CSS font-style中italic和Oblique有何区别 标签: css字体 2017-01-05 14:42 60人阅读 评论

    *要搞清楚这个问题,首先要明白字体是怎么回事.一种字体有粗体.斜体.下划线.删除线等诸多属性. 但是并不是所有字体都做了这些,一些不常用的字体,或许就只有个正常体,如果你用Italic,就没有效果了~ ...

  10. vue自定义指令clickoutside扩展--多个元素的并集作为inside

    都是个人理解,如果发现错误,恳请大家批评指正,谢谢.还有我说的会比较啰嗦,因为是以自身菜鸡水平的视角来记录学习理解的过程,见谅. 1.前言 产品使用vue+element作为前端框架.在功能开发过程中 ...