﻿# ASP.NET MVC 開發心得分享 (1)：開發流程篇

終於在這次春節長假開始有時間研究 [ASP.NET MVC](http://www.asp.net/mvc/)，雖然我在之前已經將所有 [ASP.NET MVC Tutorials](http://www.asp.net/learn/mvc/?lang=cs) 文件看完了，也看懂了，但說實在的，自己開始「動手」寫的時候，還是一樣「很卡」，非常的不順手，文件、範例程式一樣到處翻，好在我平時有整理學習資料的習慣，資料找起來有比較順手一些，建議各位在研發時一定要有做筆記的習慣。

我整理了一下最近的思緒，對於一個全新的 [ASP.NET MVC](http://www.asp.net/mvc/) 專案，應該會有以下流程：

1.  準備好網站雛形頁面(Prototype)或所有網站之靜態版型頁面
    -   透過頁面元素進行資料來源分析
        -   設計資料庫結構、表格、欄位、關連
    -   分析出所有需要的 Controller, Model, View, MasterPage, UserControl, Html Helpers
        -   可於 Prototype 加註相關說明
2.  資料庫必須先準備好
    -   需將表格、關連、檢視表、預儲程序都先建立好
    -   資料庫中最好包括測試資料，以方便套版測試之用
3.  新增 [ASP.NET MVC](http://www.asp.net/mvc/) 專案
4.  建立 **Model** ( LINQ to SQL )
    -   先透過 LINQ to SQL Designer 介面完成 ORM 物件對應
    -   再補充所有表格的 partial class 的撰寫，並將資料驗證與商業邏輯都加上
5.  建立 **Controller**
    -   將共用的 Code 寫到 BaseController 去
        -   建立共用的 DataContext 物件
        -   各 ViewPage / ViewMasterPage / ViewUserControl 共用的 ViewData 物件
    -   再將原先規劃的 Controller 全部建立
    -   再將所有 Controller 應該出現的 Action 全部建立好
    -   適當的**套用**或**自訂** [Action Filters](http://www.asp.net/learn/mvc/tutorial-14-cs.aspx)，包括 HandleError, OutputCache, Authorize
    -   接著開始分工，將不同的 Controller 指派給不同的人進行開發
6.  建立 **View**
    -   依照 Controller 的分工，各自將各自的 View 進行套版
    -   在套用 ASP.NET 內建的 SiteMap 時，要注意 securityTrimmingEnabled 屬性是不支援的，若選單會依據權限不同而顯示不同的選單項目，需自行修正。  
        參考文章：[Providing Website Navigation with SiteMaps](http://www.asp.net/learn/mvc/tutorial-20-cs.aspx)
    -   盡可能的用 Strong-Typed 的方式開發，降低 Runtime Error 的風險
    -   適當的設定 web.config 預設匯入一些在 View 中常用的命名空間，例如：ProjectX.Models  
        參考文章：[ASP.NET 如何預設匯入指定的命名空間(Namespace)](/post/2008/12/24/How-to-auto-import-specific-Namespace-in-ASPNET)
    -   適當的將在不同頁面中重複出現的元素做成 User Control
    -   若輸出的資料包括特殊的表單元素時，建議做成 Html Helper 擴充方法，以簡化頁面邏輯!

這些流程日後應該會再補充，我會更新在同一篇文章內。
