design pattern及其使用

  • 什么是设计模式?

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

  • 为何要用设计模式?

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

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

  • M-V-C 设计模式

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

在不少应用中,咱们须要从数据库中取得数据而且展现给用户。若是用户更改这些数据,应用程序就应该在数据库中保存这些数据。因为信息是在数据库及用户界面中流动,咱们常常倾向于将数据库访问及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以便可以坦然应对未来软件愈来愈多的复杂要求。ajax

咱们应该如何模块化咱们的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项目工做流程

相关文章
相关标签/搜索