• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
如何打造 WebMVC Framework - 基礎概念篇
 

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

on

  • 3,611 views

 

Statistics

Views

Total Views
3,611
Views on SlideShare
2,363
Embed Views
1,248

Actions

Likes
5
Downloads
73
Comments
0

3 Embeds 1,248

http://www.jaceju.net 1246
http://xianguo.com 1
http://translate.googleusercontent.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

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