zoukankan      html  css  js  c++  java
  • 设计模式_第三篇_我对模式的了解和认识

    在我看来,如果仅仅从编写代码的角度去看待软件的设计,而不涉及整个系统和硬件问题。在一个项目中,整个系统和硬件的相关问题由项目组中的另一些人完成,软件的设计模式主要涉及的工作就是软件架构的设计(软件逻辑架构),就是我们通常所说的三层架构:UI层,业务层和数据库层。当然标准的叫法不是这样的,但是为了形象一些,我们都这么叫。

    所谓的三层架构,对于没有多少编程经验的人来说,的确是很难体会,因此我举个简单的例子。如果程序要完成一个数据库检索功能,那么,程序需要最终用户告诉它检索条件conditions是什么,然后程序会对这个条件进行一些必要的检查,如果没符合程序要求,程序就根据这个条件创建一条SQL语句,像“select [ * ] from [ table ] [ where conditions ]”,到数据库中执行,把结果显示给用户。因此,用户输入的条件地方处在UI层,根据条件创建一条SQL语句就处在业务层,而执行这条SQL语句是由数据库层来完成。不熟悉这三层架构的程序员,我以前就是这样,经常迷惑的问题是,一个功能函数,应该写在UI层,还是业务层,数据库层?写在它们中的哪个类里?

    对于软件架构,.NET和Java都有自己想法,一个软件架构是由多个设计模式完成的,比如,对于一般的三层架构,数据库层一般采用数据工厂,业务层通常复杂点,一般采用多个设计模式。

    看一下下面这个静态结构图:

    待。

    那么,这三层都写些什么呢……(待)

    顺便说一下设计模式的起源、产生和发展。

    模式产生

    1987年,Ward Cunninghan和Kent Beck在一起用Smalltalk做设计用户界面的工作。他们决定使用Alexander的理论发展一个有五个模式的语言来指导Smalltalk的新手,因此,《Using Pattern Languages for Object-Oriented Programs》论文发表。Ward Cunninghan是一名著名的程序员,他对模式研究和极限编程有较大影响,Kent Beck是XP编程(Extreme Programming)的创始人。

    之后,Jim Coplien开始搜集C++语言的成例。成例就是当时的代码模式。这些C++成例发表在91年出版的《Advanced C++ Programming Styles and Idioms》一书中。

    • 1990到1992年,“四人组”开始搜集模式。
    • 1993年8月,Kent Beck和Grady Booch主持了在科罗拉多山区度假村召开的第一次关于模式的会议。Grady Booch是UML创始人之一。
    • 1995年,“四人组(GoF)”的《设计模式》一书出版,这是在面向对象编程中使用模式化方法研究的开创性著作。“四人组”是四个人,有Gamma、Helm、Johnson和Vlissides。说起他们能“聚在一起”,并最终成书,简直近乎不可思议。在写作该书时,他们四人分散在北美大陆的不同角落:魁北克、伊利诺斯、纽约、加州。Vlissides甚至用“3个时区”强调他们地理分布上的跨度。

    至此,参加模式研究人,以及确定的模式呈爆炸性增长。编程模式语言大会(Pattern Language of Programming,PLoP)每年定期在美国举行,大会论文也汇编成书公开发表。现在,模式不断的应用到软件工程各个方面,如开发组织,软件处理,项目配置管理等。

    模式起源

    模式并非起源于软件工程行业。模式的研究起源于建筑设计大师Christopher Alexander关于城市规划和建筑设计的著作。但尽管著作针对建筑学领域,但实际上适用于所有的工程设计领域,包括软件开发设计领域。

    亚历山大在他的著作中指出,使用现在的设计方法设计出的建筑物,不能满足所有工程设计的基本目的:改善人类的条件。他想发明的建筑结构,是使人类在舒适和生活质量上受惠的建筑结构。

    亚历山大的著作很多,推荐《建筑的永恒之道》和《模式语言》。据说,一个建筑系学生说他去书店买亚历山大的著作,很奇怪为什么每个书店都这两本书缺货……大概都被计算机系的学生买走了。正如量子物理学在上个世纪初处在科学哲学的前夜一样,目前软件工程学现在正处在产生自己的科学哲学的前夜。

  • 相关阅读:
    JS定时器做物体运动
    JS做动态表格
    JS如何做2048(详细)
    改变 C/C++ 控制台程序的输出颜色和样式
    The Game Of Life – 数据结构与算法的敲门砖
    适用于 macOS 下 2K 显示器开启 HiDPI 的简便解决方案
    「踩坑记」Android API 判断权限申请结果的闪退问题
    Hello World!
    js 放大镜效果
    js 随机验证码生成及校验
  • 原文地址:https://www.cnblogs.com/liuning8023/p/2153741.html
Copyright © 2011-2022 走看看