design pattern及其使用

  • 什么是设计模式?

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项目工作流程

 

posted @ 2015-04-28 18:03  世有因果知因求果  阅读(510)  评论(0编辑  收藏  举报