如何打造Web MVC Framework<基本概念篇> <br />自己動手造輪子<br />大澤木小鐵<br />
目標<br />
Framework 要做什麼<br />封裝眾人的開發經驗。<br />節省前期架構建置成本。<br />與伙伴有共同的開發基礎。<br />節省建置中的溝通成本。<br />導入更合理的開發方式。<br />
心理層面 <br />
資源問題<br />對公司有益嗎?值得老闆花時間投資嗎?<br />上班時間可以做嗎?還是花自己的下班時間來做?<br />要自己單打獨鬥嗎?還是有可以一起討論的同事?<br />要使用公司的伺服器嗎?還是自己申請外部空間?<br />
推廣問題<br />是自己覺得好用?還是大家都覺得好用?<br />是否打算開源?還是僅在內部使用?<br />若是打算開源,有足夠的信心嗎?能承受後續維護的壓力嗎?<br />
持續維護<br />官方資訊<br />最新消息 / 開發進度。<br />程式下載 / 問題回報。<br />現成的服務<br />GitHub<br />Google Project Hosting<br />Source Forge 。<...
文件建立與更新<br />讓使用者可以快速上手並瞭解基本功能的範例。<br />實用的程式碼片段及應用時機介紹。<br />各類別的 API 使用說明。<br />
社群<br />是否準備了官方討論區?<br />是否有時間經常性地上線回答使用者的問題?<br />能否培養出共同維護 Framework 的幫手?<br />能否定期舉辦研討說明會?<br />
到這裡…你的熱血冷卻了嗎?<br />
那麼我們繼續…<br />
技術層面<br />
基礎 <br />瞭解你用的程式語言。<br />瞭解如何與 Web Server 溝通。<br />在 Web 開發上所累積的經驗。<br />
瞭解你用的程式語言<br />發明者的初衷。<br />變數型態。<br />敘述結構。<br />物件導向開發。<br />設計模式。<br />善用語言的特性與優勢。<br />
瞭解如何與 Web Server 溝通<br />語言是否提供與 Web Server 溝通的方式?(例如 PHP 提供 $_GET 、 $_POST 、 $_SERVER 等預先處理好的變數;而 header / echo / print 可...
在 Web 開發上所累積的經驗<br />HTML / CSS / JavaScript …<br />AJAX / JSON / XML …<br />Database / Web Service …<br />Optimization / ...
再深入一點…<br />
Web MVC <br />示意圖:<br />Model<br />Controller<br />Browser<br />View<br />參考自 MVC 演化史 (http://huoding.com/2011/05/02/64)<b...
目錄結構<br />project<br />application<br />controllers<br />models<br />views<br />library<br />public<br />bootstrap.file<br />
Controller <br />Bootstrap<br />Router<br />Request<br />Response<br />Browser<br />Action Controller<br />
Bootstrap<br />處理應用程式的初始化設定並執行。<br />管理應用程式執行路徑。<br />指派 Router分析網址。<br />管理輸入 (Request) ,使得使用者的動作得以分派 ( Dispatch) 到 Actio...
Router <br />分析網址,並轉換成對應的 controller /action 及網址參數等。<br />利用 Chain of Responsibility 模式來設計路由串。<br />提供反組方法,讓 View 有機會可以用 c...
Request <br />封裝瀏覽器的要求,例如 header 、 query string 、 form 及 cookies 等內容,將其轉換成方便利用的參數。<br />封裝伺服器端環境變數、解析後的網址所對應的 controller 及...
Response <br />將所有要輸出的內容全部先緩存在此物件。<br />負責輸出 HTTP 的 header 、 body 。<br />接收程式丟出的 exception 。<br />將所有資訊傳送給 Web Server 。<br />
Action Controller <br />將系統中有關連的動作集合在同一個 Action Controller 類別裡,每個動作都是一個公開的類別方法。<br />能決定程式流程,例如重導向。<br />接收 Model 的狀態,並轉交給...
Model <br />對外介面<br />資料運算邏輯層<br />資料存取邏輯層<br />
資料運算邏輯層<br />演算法、商業邏輯…任何與資料來源無關而著重於資料運算的部份。<br />不需特別在 Framework 中實作。<br />
資料存取邏輯層<br />一般指關聯式資料庫,但可以是任何資料來源。<br />通常程式語言會有相關的套件可以利用。(例如 PHP 的 PDO 、 mysqli等。)<br />Database Adapter / Query Builder ...
View <br />Data from Model<br />Output<br />Template Engine<br />Layout<br />Template<br />
Template Engine<br />直接使用程式語言來當做樣版語法。<br />支援不同格式的輸出: HTML / JSON / XML …<br />提供管理樣版檔案路徑的方式。<br />
Template / Layout<br />通常一個 action 方法對應一個 template 檔案,但也可以再細拆為一個頁面區塊一個 template 檔案。<br />Layout 為兩階式 template 設計,一般做法是:先產生...
以上只是基礎架構<br />
我們要讓Framework更有水準<br />
可擴充性 <br />Action Helper – 擴充 Action Controller 。<br />View Helper – 擴充 View 。<br />Plugin / Behavior – 擴充 Model 。<br />Mo...
便利性 <br />Framework 除了現成的目錄結構外,通常還會提供一些方便的操作工具。<br />命令列操作指令。<br />程式碼產生器。<br />但並非一定要有這些工具才算 Framework 。<br />
命令列操作指令<br />管理專案的目錄結構、設定等。<br />產生程式碼。<br />安裝擴充套件。<br />執行排程。<br />在專案根目錄下通常會有一個狀態檔,來協助操作指令瞭解整個專案目錄的狀況。<br />
程式碼產生器 <br />通常會以命令列操作指令來呼叫使用。<br />產生 Controller / View / Data Mapper。<br />產生 CRUDScaffolding 。<br />
其他<br />提供 Form (Filter / Validator) 、 Debug 、 Log 、 Cache 等功能。<br />整個 Framework 要有 Unit Test 的能力。<br />要能夠整合第三方套件。<br />
有概念了嗎?<br />
建議現實的專案還是用別人造好的輪子<br />
謝謝收看<br />
Upcoming SlideShare
Loading in …5
×

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

4,775 views

Published on

0 Comments
10 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,775
On SlideShare
0
From Embeds
0
Number of Embeds
1,397
Actions
Shares
0
Downloads
112
Comments
0
Likes
10
Embeds 0
No embeds

No notes for slide

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

  1. 1. 如何打造Web MVC Framework<基本概念篇> <br />自己動手造輪子<br />大澤木小鐵<br />
  2. 2. 目標<br />
  3. 3. Framework 要做什麼<br />封裝眾人的開發經驗。<br />節省前期架構建置成本。<br />與伙伴有共同的開發基礎。<br />節省建置中的溝通成本。<br />導入更合理的開發方式。<br />
  4. 4. 心理層面 <br />
  5. 5. 資源問題<br />對公司有益嗎?值得老闆花時間投資嗎?<br />上班時間可以做嗎?還是花自己的下班時間來做?<br />要自己單打獨鬥嗎?還是有可以一起討論的同事?<br />要使用公司的伺服器嗎?還是自己申請外部空間?<br />
  6. 6. 推廣問題<br />是自己覺得好用?還是大家都覺得好用?<br />是否打算開源?還是僅在內部使用?<br />若是打算開源,有足夠的信心嗎?能承受後續維護的壓力嗎?<br />
  7. 7. 持續維護<br />官方資訊<br />最新消息 / 開發進度。<br />程式下載 / 問題回報。<br />現成的服務<br />GitHub<br />Google Project Hosting<br />Source Forge 。<br />
  8. 8. 文件建立與更新<br />讓使用者可以快速上手並瞭解基本功能的範例。<br />實用的程式碼片段及應用時機介紹。<br />各類別的 API 使用說明。<br />
  9. 9. 社群<br />是否準備了官方討論區?<br />是否有時間經常性地上線回答使用者的問題?<br />能否培養出共同維護 Framework 的幫手?<br />能否定期舉辦研討說明會?<br />
  10. 10. 到這裡…你的熱血冷卻了嗎?<br />
  11. 11. 那麼我們繼續…<br />
  12. 12. 技術層面<br />
  13. 13. 基礎 <br />瞭解你用的程式語言。<br />瞭解如何與 Web Server 溝通。<br />在 Web 開發上所累積的經驗。<br />
  14. 14. 瞭解你用的程式語言<br />發明者的初衷。<br />變數型態。<br />敘述結構。<br />物件導向開發。<br />設計模式。<br />善用語言的特性與優勢。<br />
  15. 15. 瞭解如何與 Web Server 溝通<br />語言是否提供與 Web Server 溝通的方式?(例如 PHP 提供 $_GET 、 $_POST 、 $_SERVER 等預先處理好的變數;而 header / echo / print 可以對 Web Server 輸出資料。)<br />沒有的話,就要非常熟悉 HTTP 協定,並自行剖析或組合 HTTP 內容。<br />瞭解 Web Server 如何執行開發出來的程式? module / CGI / FastCGI / SSL … 每種方式都有可能有難題等著解決。<br />
  16. 16. 在 Web 開發上所累積的經驗<br />HTML / CSS / JavaScript …<br />AJAX / JSON / XML …<br />Database / Web Service …<br />Optimization / Performance …<br />其他通用而可以放到 Framework 裡的經驗。<br />
  17. 17. 再深入一點…<br />
  18. 18. Web MVC <br />示意圖:<br />Model<br />Controller<br />Browser<br />View<br />參考自 MVC 演化史 (http://huoding.com/2011/05/02/64)<br />
  19. 19. 目錄結構<br />project<br />application<br />controllers<br />models<br />views<br />library<br />public<br />bootstrap.file<br />
  20. 20. Controller <br />Bootstrap<br />Router<br />Request<br />Response<br />Browser<br />Action Controller<br />
  21. 21. Bootstrap<br />處理應用程式的初始化設定並執行。<br />管理應用程式執行路徑。<br />指派 Router分析網址。<br />管理輸入 (Request) ,使得使用者的動作得以分派 ( Dispatch) 到 Action Controller 中。<br />管理輸出 (Response) ,使得應用程式能將結果傳送出來。<br />
  22. 22. Router <br />分析網址,並轉換成對應的 controller /action 及網址參數等。<br />利用 Chain of Responsibility 模式來設計路由串。<br />提供反組方法,讓 View 有機會可以用 controller / action 組出對應的網址。<br />
  23. 23. Request <br />封裝瀏覽器的要求,例如 header 、 query string 、 form 及 cookies 等內容,將其轉換成方便利用的參數。<br />封裝伺服器端環境變數、解析後的網址所對應的 controller 及 action 等資訊。<br />
  24. 24. Response <br />將所有要輸出的內容全部先緩存在此物件。<br />負責輸出 HTTP 的 header 、 body 。<br />接收程式丟出的 exception 。<br />將所有資訊傳送給 Web Server 。<br />
  25. 25. Action Controller <br />將系統中有關連的動作集合在同一個 Action Controller 類別裡,每個動作都是一個公開的類別方法。<br />能決定程式流程,例如重導向。<br />接收 Model 的狀態,並轉交給 View 顯示。<br />
  26. 26. Model <br />對外介面<br />資料運算邏輯層<br />資料存取邏輯層<br />
  27. 27. 資料運算邏輯層<br />演算法、商業邏輯…任何與資料來源無關而著重於資料運算的部份。<br />不需特別在 Framework 中實作。<br />
  28. 28. 資料存取邏輯層<br />一般指關聯式資料庫,但可以是任何資料來源。<br />通常程式語言會有相關的套件可以利用。(例如 PHP 的 PDO 、 mysqli等。)<br />Database Adapter / Query Builder 。<br />Active Record / Table Data Gateway / Row Data Gateway / Data Mapper。<br />
  29. 29. View <br />Data from Model<br />Output<br />Template Engine<br />Layout<br />Template<br />
  30. 30. Template Engine<br />直接使用程式語言來當做樣版語法。<br />支援不同格式的輸出: HTML / JSON / XML …<br />提供管理樣版檔案路徑的方式。<br />
  31. 31. Template / Layout<br />通常一個 action 方法對應一個 template 檔案,但也可以再細拆為一個頁面區塊一個 template 檔案。<br />Layout 為兩階式 template 設計,一般做法是:先產生 layout 內容,再產生 action template 內容。<br />
  32. 32. 以上只是基礎架構<br />
  33. 33. 我們要讓Framework更有水準<br />
  34. 34. 可擴充性 <br />Action Helper – 擴充 Action Controller 。<br />View Helper – 擴充 View 。<br />Plugin / Behavior – 擴充 Model 。<br />Module – 擴充整個系統。<br />
  35. 35. 便利性 <br />Framework 除了現成的目錄結構外,通常還會提供一些方便的操作工具。<br />命令列操作指令。<br />程式碼產生器。<br />但並非一定要有這些工具才算 Framework 。<br />
  36. 36. 命令列操作指令<br />管理專案的目錄結構、設定等。<br />產生程式碼。<br />安裝擴充套件。<br />執行排程。<br />在專案根目錄下通常會有一個狀態檔,來協助操作指令瞭解整個專案目錄的狀況。<br />
  37. 37. 程式碼產生器 <br />通常會以命令列操作指令來呼叫使用。<br />產生 Controller / View / Data Mapper。<br />產生 CRUDScaffolding 。<br />
  38. 38. 其他<br />提供 Form (Filter / Validator) 、 Debug 、 Log 、 Cache 等功能。<br />整個 Framework 要有 Unit Test 的能力。<br />要能夠整合第三方套件。<br />
  39. 39. 有概念了嗎?<br />
  40. 40. 建議現實的專案還是用別人造好的輪子<br />
  41. 41. 謝謝收看<br />

×