• 什么是设计模式?

design pattern是一个通用的,可以被重用的关于一个常见的问题的解决方案。

  • 为什么要用设计模式?

引入设计模式的理论基础非常简单。我们每天都会碰到问题。我们可能碰到决定使用何种算法的问题,什么是最合适的design,使用什么技术,什么模块等等。。。同样种类的问题很有可能已经被我们的前辈所碰到,如果其他人已经碰到过我们的问题,那么他们已经有效解决了该问题是很有可能的。这样的话,我们最好直接借鉴别人已经成熟的解决方案,而不是从头来过。

然而,每一个问题都是唯一的,这样每一个解决方案也都是唯一的。那么我们又如何能够使用别人的解决方案到我们的问题中呢?使用设计模式的理论基础并不是直接照抄别人现成的解决方案。design pattern指导我们如何去解决一个问题。当我们将一个大的问题不断拆分,当拆分到一个可以管理的小问题时,我们会发现这些小的问题似曾相识。比如我们需要在显示他们之前必须做好排序。这时分解后的小问题就有一个为排序。你要知道排序是一个常见的问题,而该问题的解决有多种pattern可以遵循和借鉴。

  • M-V-C 设计模式

MVC是一个指导我们隔离具有用户界面的应用程序中的presentation, logic, data三个方面的有效模式。

在很多应用中,我们需要从数据库中取得数据并且展示给用户。如果用户更改这些数据,应用程序就应该在数据库中保存这些数据。由于信息是在数据库及用户界面中流动,我们经常倾向于将数据库访问及UI界面绑定在一起。这种模式虽然可以降低代码量和提高性能,但是这种设计模式也存在重大的问题:UI和data access相比更加频繁地变更,我们应该可以经常地变更UI的逻辑,但是却不用担心数据访问这一块。比如,data access和ui presentation logic都放在一个PHP文件中,我们连接数据库,查询获取数据,显示在表格中。你首先声明表格header,然后是数据库访问逻辑,最后将查询到的数据通过一个loop打印在data table elements中。负责显示数据在表格中的Presentation logic和负责数据库查询获取数据的database access logic都放在一个PHP文件中,我们需要非常小心地处理:一旦修改了presentation logic,绝对不能因此影响到data access logic.像这种将两个方面的逻辑混为一体使得变更维护非常不变。另外应用程序倾向于加入更多的比简单数据存储访问复杂的多的业务逻辑(business logic),我们也希望能够隔离business logic以便能够坦然应对将来软件越来越多的复杂要求。

我们应该如何模块化我们的UI,business logic,data storage呢?

一个成熟的模式MVC可以帮助我们解决这个划分领域的问题

Model:

模型代表了引用将操作的数据data。model管理应用的数据。他回应来自view的请求并且回应来自controller的数据更新请求。在PHP中,这个model对应着database schema和映射的class

View:

视图view将来自model的数据展示在浏览器中以便于浏览和操作。view管理display of information.在PHP中,这个对应着将被deliever到浏览器的HTML

Controller:

控制器响应事件,典型的比如用户的交互,这些交互可能引起model或者view的变化。在PHP中,controller就是执行业务逻辑控制的php代码,它也和HTTP逻辑相耦合。

view和controller都依赖于model.然而,model并不依赖于view和controller。这是这种separation of concern的最大的一个好处。这种隔离允许model可以在和visual presentation分离的情况下独自开发和测试。在web应用中,view和controller的分离是非常好定义的。比如,展示view给用户的浏览器是和处理http请求的后端完全隔离的。所以即使这些展示在浏览器中的ui interface是由server端产生的,这些UI(the html page prepared to be sent to the browser)和处理和计算这些被用于ui中的数据的PHP代码是完全隔离的。

根据MVC的pattern,我们需要把系统分割成Model, View和Controller,对应的,我们在组织结构上也可以分为数据库,view,controller三个大的小组,每个小组内部人员任务划分可以根据个人能力来做匹配

  • View

view将具有如下方面的功能领域:reports(pages), output filtering, forms, input validation, ajax and dhtml, interfacing with control and model,presentation templates, graphics and styling, ui testing.

一种简单计量view的复杂度的指标为:form/page数

  • Model

model通常有如下的功能: database design, queries and stored procedures, object class map to data objects(比如laraveld的orm),data access layer, interface to the business logic and presentation layers.

  • Controller

business logic或者controller通常具有一下方面的功能: data validation, providing itnerface to the presentation layer, using the database layer interface, algorithms, business domain specific processing. 控制器负责访问和更新数据。在这一层,对业务逻辑的知识是非常重要的。

MVC框架的必要性:

MVC模式帮助我们应付软件系统的复杂性,基于presentation, business logic(control),and data来分割关注(seperating concern)使得我们更好的聚焦于软件模块上。

我们可以遵循上述MVC功能分割原则来设计系统,但是当我们忙于我们的PHP代码开发时,很有可能我们就会偏离方向。正因为此,我们不应一切从头开始,我们应该寻找一些现成的工具或者软件来帮助我们在design, implementation和deployment流程中始终保持正确的航向。 MVC框架(frameworks)就是一个能够简化我们开发,帮助我们以MVC模式来轻松开发的工具。框架提供一个项目的框架

  • The process matters

如果我们希望我们所开发的软件项目能够按时成功交付,那么我们做事的方法是有很大影响的。

比如,我们能够通过一次测验的能力依赖于我们平时是如何上课的:参加课堂学习,阅读附加材料,测验前复习。。。这个过程从我们第一次参加课堂学习开始。只有上述过程做的好了,我们才能真正达成考试成功的目标。同样地,这个现象也适用于软件开发。软件产品的质量由开发流程的质量来决定。

比如,对于需求本身,和用户一起工作,尽早做出prototype要求用户review反馈,这个流程是保证我们的产出和用户的要求是完全匹配的。

一个软件流程是一套一系列的产出软件功能的行动。每一个行动都有一个相应的结果输出。当这些每个行动产生的结果按照一定的顺序堆放在一起时,便最终形成了我们的产品。

  • 简单的PHP项目工作流程

design pattern及其使用的更多相关文章

  1. 说说设计模式~大话目录(Design Pattern)

    回到占占推荐博客索引 设计模式(Design pattern)与其它知识不同,它没有华丽的外表,没有吸引人的工具去实现,它是一种心法,一种内功,如果你希望在软件开发领域有一种新的突破,一个质的飞越,那 ...

  2. 设计模式(Design Pattern)系列之.NET专题

    最近,不是特别忙,重新翻了下设计模式,特地在此记录一下.会不定期更新本系列专题文章. 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 使用 ...

  3. [转]Design Pattern Interview Questions - Part 4

    Bridge Pattern, Composite Pattern, Decorator Pattern, Facade Pattern, COR Pattern, Proxy Pattern, te ...

  4. [转]Design Pattern Interview Questions - Part 2

    Interpeter , Iterator , Mediator , Memento and Observer design patterns. (I) what is Interpreter pat ...

  5. [转]Design Pattern Interview Questions - Part 3

    State, Stratergy, Visitor Adapter and fly weight design pattern from interview perspective. (I) Can ...

  6. [转]Design Pattern Interview Questions - Part 1

    Factory, Abstract factory, prototype pattern (B) What are design patterns? (A) Can you explain facto ...

  7. design pattern

    1. visitor design pattern http://butunclebob.com/ArticleS.UncleBob.IuseVisitor

  8. Design Pattern: Observer Pattern

    1. Brief 一直对Observer Pattern和Pub/Sub Pattern有所混淆,下面打算通过这两篇Blog来梳理这两种模式.若有纰漏请大家指正. 2. Use Case 首先我们来面 ...

  9. Scalaz(10)- Monad:就是一种函数式编程模式-a design pattern

    Monad typeclass不是一种类型,而是一种程序设计模式(design pattern),是泛函编程中最重要的编程概念,因而很多行内人把FP又称为Monadic Programming.这其中 ...

  10. 为什么要提倡“Design Pattern呢

    为什么要提倡“Design Pattern呢?根本原因是为了代码复用,增加可维护性. 那么怎么才能实现代码复用呢?面向对象有几个原则:开闭原则(Open Closed Principle,OCP).里 ...

随机推荐

  1. 可执行文件(ELF)格式之讲解

    ELF(Executable and Linking Format)是一种对象文件的格式,用于定义不同类型的对象文件(Object files)中都放了什么东西.以及都以什么样的格式去放这些东西.它自 ...

  2. Sqli-labs less 41

    Less-41 此处与less-39是一致的,区别在于41错误不回显.所以我们称之为盲注. Payload: http://192.168.11.189/sqli-labs/Less-41/index ...

  3. MariaDB Galera Cluster集群

    一.MariaDB Galera Cluster概要: 1.简述: MariaDB Galera Cluster 是一套在mysql innodb存储引擎上面实现multi-master及数据实时同步 ...

  4. git的安装使用和代码自动部署

    1.安装 http://www.cnblogs.com/sunada2005/archive/2013/06/06/3121098.html http://www.cnblogs.com/zhcncn ...

  5. 制作类似DataGrid自定义控件

    首先看一下.net自带的DataGrid,想想如何应该怎样才能实现那样的展现形式. 1)需要以网格形式显示内容. 2)网格的宽度.高度可以定义. 3)可以显示滚动条. 4)单击可以选中某个单元格. 当 ...

  6. Difference Between Vector and Deque in C++

    1) Dequeue can quickly insert or delete both at the front or the end. However, vector can only quick ...

  7. linux查看硬件信息及驱动设备相关整理

    查看声卡设备:cat /proc/asound/cards 查看USB设备:cat /proc/bus/usb/devices 常用命令整理如下:用硬件检测程序kuduz探测新硬件:service k ...

  8. web快速开发c/s软件构架

    很久没用.net winform 做东西,对控件相对比较陌生,另外控件的UI也不是那么好改.公司项目需要有web客户端,同时有软件客户端形式.考虑再三采用webBrowser+html 来实现 .用h ...

  9. 【OpenCV入门教程之二】 一览众山小:OpenCV 2.4.8组件结构全解析

    转自: http://blog.csdn.net/poem_qianmo/article/details/19925819 本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:ht ...

  10. excel设置下拉菜单,并且不同值会显示不同颜色

    工作中常常要用的excel,每次都会有新的需求,然后不会,然后百度,然后过段时间可能就又忘了,于是就想说,自己记录下来~~~因为自己用的都是2010,其实哪个版本都差不多,都是应该可以找到相应的按钮滴 ...