• 什么是设计模式?

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. 关于SOAP

    http://www.tutorialspoint.com/soap/index.htm http://www.w3.org/TR/2000/NOTE-SOAP-20000508/ SOAP协议规范介 ...

  2. asp.net 创建文字特效

    相信word 中的 艺术字 功能大家都不陌生.今天, 我们就利用C#来制作几款自己的艺术字, 可能会对我们了解字体图像的制作原理有一些帮助. 至于有没有使用价值我保持沉默. 一. 投影效果 程序运行效 ...

  3. Itunes connect State: Developer Action Needed

    In-App Purchases have been returned and are highlighted in the table below. Your In-App Purchase has ...

  4. Linux系统下利用wget命令把整站下载做镜像网站

    Linux系统下利用wget命令把整站下载做镜像网站 2011-05-28 18:13:01 | 1次阅读 | 评论:0 条 | itokit  在linux下完整的用wget命令整站采集网站做镜像 ...

  5. javascript中的JSON序列化与反序列化

    简单粗暴上代码: function create() { this.name = "jack"; this.sex = "man"; } create.prot ...

  6. Find the smallest number whose digits multiply to a given number n

    Given a number ‘n’, find the smallest number ‘p’ such that if we multiply all digits of ‘p’, we get ...

  7. Google NACL 简介

    Back to README Getting Started This page tells you how to install Native Client and run demos, both ...

  8. awk处理之案例三:awk去掉不需要的文本行

    编译环境 本系列文章所提供的算法均在以下环境下编译通过. [脚本编译环境]Federa 8,linux 2.6.35.6-45.fc14.i686 [处理器] Intel(R) Core(TM)2 Q ...

  9. Razor视图引擎 语法学习(一)

    ASP.NET MVC是一种构建web应用程序的框架,它将一般的MVC(Model-View-Controller)模式应用于ASP.NET框架: ASP.NET约定优于配置:基本分为模型(对实体数据 ...

  10. LINUX输入输出与文件——续

    1 目录操作 改变目录或文件的访问权限 #include <sys/stat.h> int chmod(const char *path, mode_t mode); //mode形如07 ...