MVC difference: flask, laravel and ror

趁找工作空檔,稍微看了三個WEB的MVC架構,我認為觀察MVC架構的不同是件很有趣的事情,從其中也可以發現framework的相似之處。

我這篇只有提及最基本的CRUD系統會牽涉到的東西,並未涵蓋unittest…其他東西,也許哪天我更深入研究會知道。

In ROR 4.2.5.1

  • app/models/: 定義資料
  • db/migrate: 導入定義資料到db
  • app/controllers/: 取資料、處理http request
  • app/views/: 呈現資料
  • config/routes.rb: 定義route
  • Gemfile: 定義相依套件
  • 工具指令:rails + rake(DB)

In flask

flask本身除了views, templates以外,沒有強制規定如何實作,以下我搭配blueprint後的架構對應。
  • models/: 定義資料
  • run.py: views的入口檔案,這一般就是controller的基本檔
  • views/: 取資料、處理http request
  • templates/: 呈現資料
  • requirements: 定義相依套件(透過pip freeze手動建成)
  • flask沒有特別的route檔案,甚至是連route:list都要透過url_map去手動抓取(所有views使用的route,其背後是透過add_url_rule實作的)
  • 工具指令:無(django有manager.py)

(備註1:我也許該用django為範例,但因為我日前暫時拋開django學習flask之故,所以這篇文章用flask當做python代表。)
(備註2:諸多功能flask都能夠做出來,但是相較於django需要額外做。)

In laravel 5.2.12

  • app/: model被直接放在這,定義資料
  • database/migrations/: 導入定義資料到db
  • app/Http/Requests/: 驗證資料被從model獨立出來
  • app/Http/Controllers/: 取資料、處理http request
  • resources/Views/: 呈現資料
  • app/Http/routes.php: 定義route
  • composer.json: 定義相依套件
  • 工具指令:php artisan

結論

  1. Python的Views就是大家說的Controllers
  2. Ruby跟PHP的Views就是大家說的Templates,而Python直接稱做Templates
  3. Route、套建相依管理、Migration,已被MVC視為最基本的架構元素