選一個框架當好朋友,讓您成為開心攻城獅

61
選個框架當好朋友, 讓您成為開攻城獅! shengyou @ 彰師資系學會(2014.11.27)

Transcript of 選一個框架當好朋友,讓您成為開心攻城獅

選⼀一個框架當好朋友,讓您成為開⼼心攻城獅!

shengyou @ 彰師⼤大資⼯工系學會(2014.11.27)

演講主題分配• 選⼀一個框架當朋友,讓你成為開⼼心攻城獅• 使⽤用 Laravel 的前與後• 成為全能 PHP 攻城獅

范聖佑@shengyou https://www.facebook.com/shengyoufan

得寬科技 研究員 Laravel 台灣 版主 laravel-dojo 作者

簡報主題• 實作模擬:⼀一個 Blog 專題作業• 不使⽤用框架⾯面臨的問題與瓶頸• 導⼊入當代開發流程• MVC 框架綜覽與選擇策略• Laravel Framework 簡介

實作模擬• 模擬實作⼀一個 Blog 專題作業

- 實作⼀一個簡易的 Blog 網站- 每⼀一篇⽂文章都可以歸屬於某⼀一個分類- 三種呈現⽅方式:總覽、分類、單⼀一- 列表型⾴頁⾯面⽀支援分⾴頁瀏覽

有獎問答:簡述您的作法

警告!葛格沒練過,這 Code 很危險!

開發流程• 設計⾴頁⾯面、規劃 DB

• 建⽴立開發環境• 對應每⼀一⾴頁寫出 *.php 檔案• 與組員協同合作• 專題佈署

⾴頁⾯面分配

index.phpcategory.php post.php

&category_id=

?page= ?page= ?id=

分類⾴頁 ⾸首⾴頁(總覽) ⽂文章詳細⾴頁

各出奇招• WAMP、XAMPP、EasyPHP、AppServ

• Microsoft Web Platform 安裝包• PHP + MySQL + Apache 獨⽴立安裝/設定• (Mac) MAMP、Homebrew、系統內建• (Linux) apt-get、compiled from source

DB 規劃

連接資料庫

過時的語法

http://php.net/manual/en/function.mysql-connect.php

修正連線語法http://php.net/manual/en/mysqlinfo.api.choosing.php

設定資料庫連線編碼http://php.net/manual/en/mysqli.set-charset.php

各程式碼區塊資料庫連線

各程式碼區塊⽂文章列表

各程式碼區塊分類列表

各程式碼區塊分⾴頁計算及選單

整理程式結構• 把整個程式常⽤用的變數改成常數,獨⽴立在⼀一個 config.php 裡,並在各⾴頁引⼊入

• 每⼀一⾴頁要⽤用到的資料庫連線,獨⽴立成⼀一個檔案,在每⼀一⾴頁引⼊入

• ⾴頁⾯面重複的部份,把每⼀一塊拆成獨⽴立的 *.php 檔案

協同合作• 交換專題檔案

- 把原始檔⽤用 zip 打包,⽤用 email 交換;或是直接共享⼀一個 Dropbox 資料夾

- 從 學⻑⾧長A 那邊拿到⼀一包傳說中超好⽤用的資料庫連線 Class

- 從 學⻑⾧長B 那邊拿到⼀一包聽說也很好⽤用的樣板⼯工具包

程式佈署• 把專題送上線

- 使⽤用學校提供的網路主機- 在網路上搜尋免費的 php + mysql 空間- 使⽤用 FTP 軟體,將所有原始碼上傳

回顧與討論

以上的開發流程是否似曾相識?回想⼀一下⾃自⼰己曾經寫過的專題,在開發時有遇到什麼問題嗎?或是跟同學合作時,有沒有什麼部份讓你感到困擾?程式佈署⽅方⾯面,有沒有更好的作法?

有獎問答:請分享您的想法

開發⾯面的問題• 使⽤用 懶⼈人包 的開發⼯工具雖然⽅方便,但有版本過舊、擴充、與線上環境同步等問題

• 程式碼內混雜流程控制、DB 操作、顯⽰示等動作,在開發上會較不易分⼯工及維護

• 各 Class 沒有統⼀一的載⼊入⽅方式,也沒有管理相依性的機制,無法建⽴立在前⼈人的基礎上開發

維護⾯面的問題• 在開發過程中,針對資料庫的內容沒有⽅方便的倒假資料功能,在開發資料庫相關功能時,無法專注在程式⾯面上

• 沒有統⼀一針對程式錯誤的處理/除錯機制,也無法透過設定在不同的開發模式底下開啟/關閉錯誤訊息

安全性的問題• 全部程式碼都在 Document Root 底下,增加原始碼曝露⾵風險

• 資料庫的操作全部靠撰寫 SQL 語法,且沒有設定對應的安全機制,容易受到攻擊

• 表單傳送沒有對 csrf 進⾏行防禦,容易被可能的攻擊 try 到 飽/寶…

合作⾯面的問題• 資料庫的變更全部靠⼿手動直接操作資料庫

(多⼈人開發時,成員無法取得新版結構)

• 每⼈人使⽤用的開發環境、程式碼撰寫⾵風格不⼀一,不論是在除錯或未來維護上都較不易

• 檔案交換沒有統⼀一的控管機制,不知道誰的版本⽐比較新/舊?不同⼈人對同⼀一檔案編輯時,不知道差異

佈署上的問題• 上線主機與開發⽤用機器在環境上不同步,程式碼的運⾏行結果可能也不同

• 所有連線資訊直接寫在程式碼內,佈署時需要⼿手動更改,無法動態由主機端載⼊入

• 直接⽤用 FTP 佈署程式碼,連線⽅方式不安全,佈署的程式版本也無法控管

看似簡單卻不簡單• ⼀一個網路應⽤用程式要處理的⼯工作有:

謎之⾳音:何不⽤用框架?

- 路由 Route- ⾴頁⾯面邏輯控制- DB 操作- 產出⾴頁⾯面- 安全性防禦

- AJAX 處理- 資料分⾴頁- 使⽤用者認證- 錯誤處理機制- 寄發 Email

導⼊入當代開發流程• 使⽤用 MVC 框架• 使⽤用版本控制• 使⽤用虛擬機器開發• 使⽤用 PaaS 平台做佈署

框架 101• 將常⾒見的開發需求、功能,封裝成各種元件,以⽀支援開發者迅速的完成開發⼯工作,不⽤用每次重新發明輪⼦子

• 框架本⾝身會有許多開發慣例、程式碼撰寫⾵風格。透過使⽤用相同的框架,開發者彼此間將更容易的進⾏行合作、維護

★ 參考資料:http://en.wikipedia.org/wiki/Web_application_framework

MVC 框架• M-V-C 是⺫⽬目前網路應⽤用程式的主流開發架構,透過將 資料操作(Model)、流程控制(Controller)、⾴頁⾯面顯⽰示(View) 分離,讓開發⼯工作可以各司其職,程式碼更容易維護

• ⼤大多數的框架還會提供⼀一系列的⼯工具包、擴充程式,儘可能的降低開發⼯工作的難度

版本控制• 就像玩遊戲都會找存檔點⼀一樣,版本控制的⺫⽬目的就是讓每⼀一次的程式碼變更都有紀錄可尋、可查、可回溯

• 在開發流程中導⼊入版本控制,能讓成員更⽅方便的協助合作;佈署時,若失敗了還有辦法回復到上⼀一個可運作的版本

使⽤用虛擬機器開發• 透過虛擬化技術直接在⾃自⼰己的本機端安裝另⼀一個作業系統 (guest VM),並讓⾃自⼰己的本機端與該虛擬機器共享檔案,達成在本機開發但在虛擬機器測試的好處

• 虛擬機器可以完全模擬上線主機的環境,若不⼩小⼼心把環境弄壞了,砍掉重練就好

PaaS 佈署• ⼀一般常⾒見的網路主機往往是 共享主機

(shared hosting),會有 PHP 版本過舊、資源共搶、無法安裝額外套件的缺點

• 使⽤用 PaaS 的服務,讓你只需要專注在程式開發即可,主機安裝、設定、擴充、流量等都可以由平台直接幫您完成

框架綜覽與選擇決策

PHP 市佔率最⾼高• PHP 是市佔率最⾼高的伺服器端程式語⾔言

★ 資料來源:http://w3techs.com/technologies/overview/programming_language/all

W3Techs.com 2014/11/16

框架也因此出奇的多

★ 資料來源:http://socialcompare.com/en/comparison/php-frameworks-comparison

(認)真的很多…

★ 資料來源:http://www.bestwebframeworks.com/compare-web-frameworks/php/

族繁不及備載…

★ 資料來源:http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#PHP_2

各出奇招、各有所⻑⾧長• 輕量、⼩小巧• 敏捷開發、易於使⽤用• 全⽅方位、企業化• 效能為⺩王

框架選擇策略• 框架本⾝身的設計邏輯與哲學• 官⽅方有⼤大神領頭開發、背後的商業⽀支援• 教學資源豐富、傳教⼠士多• 社群夠⼤大、相關⽣生態系完整

框架選擇策略• 框架本⾝身的設計邏輯與哲學

- 架構本⾝身的設計是否清楚簡明?- 框架內各元件的職責是否分明?- 各元件的 API 封裝是否直覺且易於使⽤用?

框架選擇策略• 官⽅方有⼤大神領頭開發

- 其開發⽅方向是否有跟上⼤大環境趨勢?- 框架是否有定期更新、 安全性升級的通告?確保框架維護不會出問題

- 官⽅方背後是否有商業公司⽀支援?商業公司往往會投⼊入⼀一定⼈人⼒力成本⽀支援框架的發展

框架選擇策略• 教學資源豐富、傳教⼠士多

- 框架本⾝身的⽂文件是否完整清楚?- 若該框架的傳教⼠士夠多,就表⽰示除了官⽅方⽂文件外,還有眾多的教學範例。傳教⼠士愈多,往往代表有⾜足夠的教學資源供學習、觀摩。

框架選擇策略• 社群夠⼤大、相關⽣生態系完整

- 使⽤用⼀一個框架就像加⼊入⼀一個⽣生態系⼀一樣,若該⽣生態系不夠⼤大,對應的學習資源、可使⽤用的套件就會相形不⾜足,在開發上就會相形孤單。因此,選擇⼀一個社群夠⼤大的框架是⼀一個重要的因⼦子。

Laravel Framework• 由 Taylor Otwell 主導開發,⺫⽬目前 4.2 版:

- 參考 Ruby on Rials、ASP.NET MVC 及 Sinatra 的語法和架構

- ⼤大量使⽤用 Symfony 元件,建⽴立堅實的框架基礎

- 預定 2014.12 發佈 5.0 版

核⼼心理念

語法簡單優美的,讓開發者愉快的 PHP 框架!

Happy developers make the best code.

★ 參考資料:http://laravel.com/docs/4.2#laravel-philosophy

選擇 Laravel 的原因• 簡單、清楚、⾃自我表達的框架元件• 官⽅方⽂文件完整清楚、相關學習資源完整• 作者定期發佈新版• 跟上潮流趨勢的開發⼯工具/套件• 傳教⼠士多、社群⼤大

• ⽣生態系完整、 相關套件多

選擇 Laravel 的原因• 框架元件本⾝身具備簡單、清楚、⾃自我表達的特質,作者如是說:- It’s expressive

- It’s simple

- It’s accessible

★ 參考資料:http://taylorotwell.tumblr.com/post/21038245018/why-laravel

選擇 Laravel 的原因• 官⽅方⽂文件完整清楚

• 除了官網上提供的原⽂文版• 現在還有社群正體中⽂文版

• 相關學習資源多• 可在 leanpub 上⽤用 laravel 當關鍵字查

★ 官⽅方⽂文件:http://laravel.com/docs/4.2

★ 參考書籍:http://www.laravel-dojo.com/books

選擇 Laravel 的原因

★ 參考資料:https://twitter.com/ipalaus/status/305438396568989697

作者每 6 個⽉月為⼀一個發⾏行週期

選擇 Laravel 的原因

But… Laravel 5 會延到 2015/01,作者說:「值得等!」

★ 參考資料:http://blog.laravel.com/laravel-5-release-dates/

選擇 Laravel 的原因

★ 參考資料:http://blog.laravel.com/on-laravels-future-part-2/

2015 年起,作者 (Taylor) 將全職投⼊入開發 Laravel

★ 參考資料:http://taylorotwell.com/on-laravels-future/

選擇 Laravel 的原因• 跟上潮流趨勢的開發⼯工具/套件

- homestead (虛擬機器)

- socialite (介接各種 oauth 認證)

- cashier (整合 Stripe 訂閱型⾦金流服務)

- elixir (處理前端 assets 的煉⾦金藥)

選擇 Laravel 的原因• 傳教⼠士多

- 各⽅方⼤大神投⼊入 Laravel 開發⼯工作 (Cool kids are in the community!)

• 社群⼤大- 2013 年最受歡迎框架- Github 最多關注 PHP 框架

★ 參考資料:http://laravel-news.com/category/the-artisan-files/

★ 參考資料:http://taylorotwell.com/on-community/

市場調查現況

★ 資料來源:http://www.sitepoint.com/best-php-frameworks-2014/

Laravel 是 2013 年最受歡迎的框架

Github 最受觀注Laravel 是 Github 上最多星星的 PHP 框架

★ Github 搜尋:http://bit.ly/1t1qsEz

★ Wikipedia 紀錄:http://en.wikipedia.org/wiki/Laravel#cite_note-7

Google 搜尋趨勢Laravel 是最熱⾨門的搜尋關鍵字 (Google Trend)

★ 參考資料:http://bit.ly/1sYbJtQ

選擇 Laravel 的原因

★ 參考資料:http://packalyst.com/

⽣生態系完整、相關套件多

⼩小結• 透過專題模擬了解單純使⽤用 PHP 撰寫網路應⽤用程式時可能⾯面臨的瓶頸和問題

• 現代開發流程、框架選擇決策及 Laravel 框架簡介

• 接下來,將⽤用 Laravel 再實作⼀一次專題以做為對照

Q & AThanks for listening!