如何打造 webmvc framework - 基礎概念篇

41
如如如如 Web MVC Framework < 如如如如如 > 自自自自自自自 自自自自自

Upload: jace-ju

Post on 30-Jun-2015

3.979 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 如何打造 WebMVC Framework - 基礎概念篇

如何打造Web MVC

Framework<基本概念篇>

自己動手造輪子大澤木小鐵

Page 2: 如何打造 WebMVC Framework - 基礎概念篇

目標

Page 3: 如何打造 WebMVC Framework - 基礎概念篇

Framework 要做什麼• 封裝眾人的開發經驗。• 節省前期架構建置成本。• 與伙伴有共同的開發基礎。• 節省建置中的溝通成本。• 導入更合理的開發方式。

Page 4: 如何打造 WebMVC Framework - 基礎概念篇

心理層面

Page 5: 如何打造 WebMVC Framework - 基礎概念篇

資源問題• 對公司有益嗎?值得老闆花時間投資嗎?• 上班時間可以做嗎?還是花自己的下班時

間來做?• 要自己單打獨鬥嗎?還是有可以一起討論

的同事?• 要使用公司的伺服器嗎?還是自己申請外

部空間?

Page 6: 如何打造 WebMVC Framework - 基礎概念篇

推廣問題• 是自己覺得好用?還是大家都覺得好用?• 是否打算開源?還是僅在內部使用?• 若是打算開源,有足夠的信心嗎?能承受

後續維護的壓力嗎?

Page 7: 如何打造 WebMVC Framework - 基礎概念篇

持續維護• 官方資訊

– 最新消息 / 開發進度。– 程式下載 / 問題回報。

• 現成的服務– GitHub– Google Project Hosting– Source Forge 。

Page 8: 如何打造 WebMVC Framework - 基礎概念篇

文件建立與更新• 讓使用者可以快速上手並瞭解基本功能的

範例。• 實用的程式碼片段及應用時機介紹。• 各類別的 API 使用說明。

Page 9: 如何打造 WebMVC Framework - 基礎概念篇

社群• 是否準備了官方討論區?• 是否有時間經常性地上線回答使用者的問

題?• 能否培養出共同維護 Framework 的幫手?• 能否定期舉辦研討說明會?

Page 10: 如何打造 WebMVC Framework - 基礎概念篇

到這裡…你的熱血冷卻了嗎?

Page 11: 如何打造 WebMVC Framework - 基礎概念篇

那麼我們繼續…

Page 12: 如何打造 WebMVC Framework - 基礎概念篇

技術層面

Page 13: 如何打造 WebMVC Framework - 基礎概念篇

基礎 • 瞭解你用的程式語言。• 瞭解如何與 Web Server 溝通。• 在 Web 開發上所累積的經驗。

Page 14: 如何打造 WebMVC Framework - 基礎概念篇

瞭解你用的程式語言• 發明者的初衷。• 變數型態。• 敘述結構。• 物件導向開發。• 設計模式。• 善用語言的特性與優勢。

Page 15: 如何打造 WebMVC Framework - 基礎概念篇

瞭解如何與 Web Server 溝通

• 語言是否提供與 Web Server 溝通的方式?

( 例如 PHP 提供 $_GET 、 $_POST 、 $_SERVER 等預先處理好的變數;而 header / echo / print 可以對 Web Server 輸出資料。 )

• 沒有的話,就要非常熟悉 HTTP 協定,並自行剖析或組合 HTTP 內容。

• 瞭解 Web Server 如何執行開發出來的程式? module / CGI / FastCGI / SSL … 每種方式都有可能有難題等著解決。

Page 16: 如何打造 WebMVC Framework - 基礎概念篇

在 Web 開發上所累積的經驗• HTML / CSS / JavaScript …• AJAX / JSON / XML …• Database / Web Service …• Optimization / Performance …• 其他通用而可以放到 Framework 裡的經

驗。

Page 17: 如何打造 WebMVC Framework - 基礎概念篇

再深入一點…

Page 18: 如何打造 WebMVC Framework - 基礎概念篇

Web MVC • 示意圖:

Browser Controller

Model

View

參考自 MVC 演化史 (http://huoding.com/2011/05/02/64)

Page 19: 如何打造 WebMVC Framework - 基礎概念篇

目錄結構 project

application

controllers

models

views

library

public

bootstrap.file

Page 20: 如何打造 WebMVC Framework - 基礎概念篇

Controller

Bootstrap

Router

Request Response

Action Controller

Browser

Page 21: 如何打造 WebMVC Framework - 基礎概念篇

Bootstrap

• 處理應用程式的初始化設定並執行。• 管理應用程式執行路徑。• 指派 Router分析網址。• 管理輸入 (Request) ,使得使用者的動作

得以分派 ( Dispatch) 到 Action Controller 中。

• 管理輸出 (Response) ,使得應用程式能將結果傳送出來。

Page 22: 如何打造 WebMVC Framework - 基礎概念篇

Router

• 分析網址,並轉換成對應的 controller / action 及網址參數等。

• 利用 Chain of Responsibility 模式來設計路由串。

• 提供反組方法,讓 View 有機會可以用 controller / action 組出對應的網址。

Page 23: 如何打造 WebMVC Framework - 基礎概念篇

Request

• 封裝瀏覽器的要求,例如 header 、 query string 、 form 及 cookies 等內容,將其轉換成方便利用的參數。

• 封裝伺服器端環境變數、解析後的網址所對應的 controller 及 action 等資訊。

Page 24: 如何打造 WebMVC Framework - 基礎概念篇

Response

• 將所有要輸出的內容全部先緩存在此物件。• 負責輸出 HTTP 的 header 、 body 。• 接收程式丟出的 exception 。• 將所有資訊傳送給 Web Server 。

Page 25: 如何打造 WebMVC Framework - 基礎概念篇

Action Controller

• 將系統中有關連的動作集合在同一個 Action Controller 類別裡,每個動作都是一個公開的類別方法。

• 能決定程式流程,例如重導向。• 接收 Model 的狀態,並轉交給 View 顯示。

Page 26: 如何打造 WebMVC Framework - 基礎概念篇

Model

資料運算邏輯層

資料存取邏輯層

對外介面

Page 27: 如何打造 WebMVC Framework - 基礎概念篇

資料運算邏輯層• 演算法、商業邏輯…任何與資料來源無關

而著重於資料運算的部份。• 不需特別在 Framework 中實作。

Page 28: 如何打造 WebMVC Framework - 基礎概念篇

資料存取邏輯層• 一般指關聯式資料庫,但可以是任何資料

來源。• 通常程式語言會有相關的套件可以利用。

( 例如 PHP 的 PDO 、 mysqli 等。 )

• Database Adapter / Query Builder 。• Active Record / Table Data Gateway / Row

Data Gateway / Data Mapper 。

Page 29: 如何打造 WebMVC Framework - 基礎概念篇

View

Template Engine

Data from Model

Layout

Template

Output

Page 30: 如何打造 WebMVC Framework - 基礎概念篇

Template Engine

• 直接使用程式語言來當做樣版語法。• 支援不同格式的輸出: HTML / JSON /

XML …• 提供管理樣版檔案路徑的方式。

Page 31: 如何打造 WebMVC Framework - 基礎概念篇

Template / Layout

• 通常一個 action 方法對應一個 template 檔案,但也可以再細拆為一個頁面區塊一個 template 檔案。

• Layout 為兩階式 template 設計,一般做法是:先產生 layout 內容,再產生 action template 內容。

Page 32: 如何打造 WebMVC Framework - 基礎概念篇

以上只是基礎架構

Page 33: 如何打造 WebMVC Framework - 基礎概念篇

我們要讓FRAMEWORK

更有水準

Page 34: 如何打造 WebMVC Framework - 基礎概念篇

可擴充性 • Action Helper – 擴充 Action Controller 。• View Helper – 擴充 View 。• Plugin / Behavior – 擴充 Model 。• Module – 擴充整個系統。

Page 35: 如何打造 WebMVC Framework - 基礎概念篇

便利性 • Framework 除了現成的目錄結構外,通常

還會提供一些方便的操作工具。–命令列操作指令。– 程式碼產生器。

• 但並非一定要有這些工具才算 Framework 。

Page 36: 如何打造 WebMVC Framework - 基礎概念篇

命令列操作指令• 管理專案的目錄結構、設定等。• 產生程式碼。• 安裝擴充套件。• 執行排程。• 在專案根目錄下通常會有一個狀態檔,來

協助操作指令瞭解整個專案目錄的狀況。

Page 37: 如何打造 WebMVC Framework - 基礎概念篇

程式碼產生器 • 通常會以命令列操作指令來呼叫使用。• 產生 Controller / View / Data Mapper 。• 產生 CRUD Scaffolding 。

Page 38: 如何打造 WebMVC Framework - 基礎概念篇

其他• 提供 Form (Filter / Validator) 、

Debug 、 Log 、 Cache 等功能。• 整個 Framework 要有 Unit Test 的能力。• 要能夠整合第三方套件。

Page 39: 如何打造 WebMVC Framework - 基礎概念篇

有概念了嗎?

Page 40: 如何打造 WebMVC Framework - 基礎概念篇

建議現實的專案還是用別人造好的輪子

Page 41: 如何打造 WebMVC Framework - 基礎概念篇

謝謝收看