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
結論
- Python的Views就是大家說的Controllers
- Ruby跟PHP的Views就是大家說的Templates,而Python直接稱做Templates
- Route、套建相依管理、Migration,已被MVC視為最基本的架構元素