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項目工做流程

相關文章
相關標籤/搜索