## 開發流程
SpeedPHP框架推薦兩種PHP系統的開發流程。
開發流程,在許多軟件工程的書籍上面,是屬于開發方法學的一部分內容。開發方法學可以說是保證項目成功的整體方法,有興趣的朋友可以參考相關文章或到論壇討論。而開發流程,就是開發方法學中最基本的組成部分。
>本章內容均為個人經驗所總結,并在實踐中多個項目中證實了其有效性,但在一般方法學的書上找不到對應的方法學理論(有相似的),讀者朋友有建議或問題歡迎到論壇討論。
### 一、快速迭代開發流程
我們介紹的第一種開發流程,是快速迭代開發流程。快速迭代開發流程主要的對象是中小型應用程序、在需求不太明朗或探索階段使用,根據WEB系統開發的基礎過程,在最短的時間內把根本的需求功能完成并發布,在發布的時候盡可能收集用戶反饋,然后進入下一輪的類似開發過程中;不停重復該過程,使得系統需求在實踐中不斷根據用戶需求而完善。
**使用對象**:
- 需求不明朗的項目,
- 創業型項目,
- 試驗型項目,
- 中小型應用程序等。
**核心詞**:快速發布,迭代完善
**示意圖**:

**實施步驟**:
#### 1. 核心需求,核心外觀元素
定下項目的核心需求,核心需求就是你的項目與別的項目不同的地方,或者說,如果沒有核心需求,那么該項目也沒必要存在。
一般而言,創業型的項目,核心需求就是“滿足用戶某一需求”,如hao123網站,核心需求就是滿足用戶“網址導航”的需求、如企業網站,核心需求有可能是宣傳企業、或宣傳產品、或吸引在線訂單等。核心需求最好只有一個,才能更快更好地發布和完善,才能更好地增強到最大收益。如果有多個核心需求怎么辦?如果你的項目是上面所述的“使用對象”,那么初期項目核心需求應該只有一個,然后在迭代期間加入其他需求,根據用戶的反饋再行修正。
核心的外觀元素,如網站外觀、LOGO、域名等。這些元素,從一開始就是為了核心需求服務,所以要注意不能喧賓奪主,不要為了外觀設計而弱化和轉移了網站的核心需求。
#### 2. 核心模型,頁面設計
當核心需求定下后,可以開始設計核心模型,以此同時可以開始頁面的設計(如果是團隊開發的話)。
核心模型,主要是定下數據表的基礎結構,還有用戶操作的模擬。
從核心需求出發,考慮用戶對核心需求的多個操作(可以說成頁面交互)、用戶可以得到的數據等。這樣可以初步確定需要的是哪些數據(數據基礎結構),還有需要哪些頁面(用戶操作模擬)。
在核心模型的建設的同時,頁面外觀設計也可以同步進行。
> 結合SpeedPHP框架開發,核心模板可以定義了model類(主要是數據表)和controller類(頁面與交互),頁面外觀設計可以定義了view模板。
定義模型可以直接通過寫PHP類文件來進行,如controller類,開發者可以根據頁面交互,設計出相應控制器與動作;當然,我們主要是需要架構,動作內部的代碼可以等到下一步驟再編寫。
通過這一步驟,我們大略可以得出應用程序的整體架構,并寫出部分的代碼了。
> 得出大體的程序架構而不是一開始就些內部代碼,好處就是可以讓開發者有了整體觀,對系統和項目需求有了一個整體的概念,“了然于胸”,這樣在代碼實現階段才不會迷失在代碼和功能延伸的旋窩中。
#### 3. 功能實現,填充頁面,上線運行
當核心模型完成后,頁面設計稿也逐漸完成的時候,可以開始功能的實現;通俗些說就是“套頁面”了。
這一步驟主要的工作流程:controller中,從$_GET/$_POST里面獲取到用戶提交數據和操作數據,然后通過model進行數據庫的讀取與寫入,返回給controller再通過$this->賦值到模板中,最后在模板中完成標簽的使用和顯示。
在完成了以上三個步驟之后,項目基本可以用了。由于上面的步驟省去了許多“非核心”的需求(因為一開始就只考慮核心需求,所以后面的設計和編程都只圍繞在核心需求來做),所以上面步驟完成的時間比較短,一般而言,也很簡陋。不過沒關系,我們慢慢完善——根據真正的用戶需要!
#### 4. 收集反饋,收集數據,篩選需求
收集用戶反饋,項目上線后,給用戶使用核心的功能,并建立良好的反饋通道,熱心收集用戶提出的反饋。
用戶是沒有耐心的、只會很直觀地提出看法。要導引用戶提出反饋和理解用戶的看法,是一項需要非常用心的工作。
收集客觀數據,在項目上線后,還需要收集“訪問統計分析”、“注冊人數”、“使用人數”等等客觀數據來輔助驗證用戶反饋。
收集好了用戶反饋后,就開始將這些反饋進行篩選,使其成為下一步迭代開發的“核心需求”。
篩選用戶需求:
- 不要先入為主。這是需求分析中最嚴重的問題,有的開發者本身就對系統需求有所看法并且自認為是最好的看法,然后會將用戶的反饋分成兩類:“正確,贊同我看法的”和“錯誤,不贊同我看法的”。這樣的角度來看待用戶反饋,倒不如不要看用戶反饋了。
- 不要忽略“很笨”的意見。用戶有可能會提一些咋一聽上去是令人啼笑皆非的建議,但深思下來,有可能那是非常有價值的意見。
- 關注與核心需求有關的細節。只關注與核心需求相關的細節。
- 和原有核心需求不同的意見,要特別注意和仔細思考。
#### 5. 迭代開發
在提煉出再一次的核心需求后,我們開始進入第二輪的“迭代開發”,也就是第二次開發過程。
- 重復上面所述1~3步驟,將新補充完善的核心需求變化為現實。
- 在原有系統基礎上,繼續調整和改動。由于前面所述的第二步驟的框架MVC架構,所以可以讓調整和改動變得更簡單。只是對相應的部分進行改動,如數據調整改model(或者繼承等方法)、交互增加了調整controller、頁面改動調整view模板。
- 在第二次開發完成后,繼續收集用戶反饋,以調整需求并進行開發。這就是“迭代”開發的含義。
### 二、基于MVC架構開發流程
這里介紹的第二種開發流程,更傾向于傳統的過程式開發流程。可以說是融合WEB系統開發的特點和傳統的過程式開發流程的綜合。
**使用對象**:
- 需求較明確的項目,
- B/S應用類系統(非網站),
- 較大型的應用系統等。
**核心詞**:基于MVC的系統分析、系統設計、系統實現。
**示意圖**:

本過程共有三個階段,分別對應傳統開發流程的:分析、設計、實現,然后每階段都可以分開MVC三部分來進行。
**實施步驟**:
#### 1. 系統分析
和傳統開發流程一致,首先我們對系統進行分析工作。我們可以將系統分成三類來進行分析:
- 需求分析(control):提煉角色,再現角色與系統交互的場景,分析交互點。
- 業務流分析(model):檢視和模擬業務流的走向、變化,靜態觀察業務數據構成和使用。
- 界面原型(view):設計界面原型,驗證上面兩者分析的正確性和合理性。
產物:需求分析文檔,業務數據分析文檔,界面原型。
#### 2. 系統設計
在系統設計階段,我們同樣分開三部分來進行:
- 交互設計(control):將前面《需求分析文檔》中的“交互場景”設計成控制器(controller),場景中的交互點,設計成控制器的動作(action),換句話說,也就是頁面。
- 數據結構設計(model):從《業務數據分析文檔》提煉出業務模型(model),細化模型的接口,并根據其屬性來建立數據結構。
- 界面設計(view):開始設計用戶界面和系統界面,以驗證先期需要達到的需求。
產物:控制器架構、模型架構、數據結構、界面設計稿。
#### 3. 系統實現
在系統實現階段,開發團隊通常可以并行地分別進行業務邏輯、界面和程序交互的設計:
- 專注于交互程序(control):繼承于spController,通過對控制器和動作的交互程序編程,來實現系統交互功能,以及將數據發送到前端界面view中顯示。
- 專注于業務邏輯(model):繼承于spModel,通過對業務邏輯和數據的封裝,制造只通過接口與外界聯系的模型類,供給控制器使用。
- 專注于前端界面設計(view):通常,使用模板引擎技術將控制器提供的數據進行簡單的邏輯處理并顯示。
產物:完成系統。
以上就是基于MVC的系統分析、系統設計、系統實現的過程。其實以上兩種方法學可以并存在同一個過程中,這需要開發者根據實際情況來靈活應用。
> 簡而言之,任何的方法學或者過程,都是希望能在最短的時間內,做最優質的項目;如何保證質量以及按時,開發者可以多探討。
另外,從SpeedPHP框架本身而言,良好的編碼架構是保證了開發流程成功的一個要素;同時,SpeedPHP比起其他框架而言,更簡單易學,這也讓開發團隊可以節省下成員更替的空檔時間和節省上手時間,這也符合了“最短時間”的需要。
- 自述
- 一、入門教程
- 1. 開始使用SpeedPHP
- 2. Hello World
- 3. 理解MVC
- 4. 制作留言本
- 5. 數據操作及Ajax
- 二、框架概述
- 1. 特色
- 2. 版權及開源協議
- 3. 開發環境
- 4. 編碼版本
- 5. SAE平臺使用
- 三、開發指南
- 1. 開發流程
- 2. 架構及擴展
- 3. 程序目錄結構
- 4. 命名建議
- 5. 安全建議
- 6. 用戶自定義
- 7. 模塊modules
- 四、訪問交互
- 1. 表單提交及數據獲取
- 2. session/cookie的使用
- 3. 偽靜態及URL跳轉
- 4. 使用frameset
- 5. 模板引擎特性和使用方法
- 五、數據操作
- 1. 建立數據模型類
- 2. 數據操作教程
- 3. 分頁
- 4. SQL支持及關聯實現
- 5. 多數據庫、主從庫配置