ASP.NET 網站架構模式速談

ASP.NET彈性相當大,從個人小網站到超大型全球性網路服務,只要有錢有人都可以開發的出來,要具備這麼強大的能力,她的複雜度是可想而知的,不過正因為彈性,對於入門者或是有經驗的開發人員,都可以在使用 ASP.NET 的學習與開發過程中獲得滿足,無論是成就感或是滿足感,甚至賺到錢的飽足感。

這裏分享一下自己的 ASP.NET 經驗,從簡單到複雜,快速的來看看ASP.NET 幾種開發設計的架構模式。
  • 最簡單

以這種模式建構網站最簡單,拉好控制項,完成設定,寫一些程式碼,一個網站就完成了,這是吸引初學者投入 ASP.NET 最有效的方式,也因此寫書時最喜歡拿這個炫耀給讀者看,證明一般人不需要多辛苦就可以成為一名 ASP.NET 網站程式設計師,帶大家一起跳火坑。
  • 稍微像樣的模型

一旦開始真正下海開發 ASP.NET 網站,你就會發現用最簡單的方式來開發行不通的,然後會嘗試將其中一些程式碼切割出來,程式量就開始大了起來,不過還算單純,只要學好 C# ,會設計類別就不會有太大的問題。

  • 像樣不夠還要好維護

從網頁抽離出來的程式碼愈來愈多,接下來會就變得很難維護,在這種情形下,針對這些程式碼,再進一步作切割的動作,而最明快的作法是直接分成兩種,一種是與資料庫直接存取有關的程式碼,也就是與 CRUD(新增、查詢、修改、刪除)功能有關的程式再抽離出來,這一堆程式碼集中在一起變成資料層,剩下的就是邏輯層,邏輯層不牽涉資料的存取,重點放在提供網站各種運算服務邏輯所需的程式碼。
  • 彈性是大型程式設計的真理

網站規模一旦開始成長,就必須考慮到彈性的問題,特別是資料的抽換與擴充,要達到這個目的當然就從資料存取的相關程式碼開刀,至於怎麼下刀,一個很簡單的原則,不要直接存取資料庫,再建立一個虛擬層對應至資料庫,然後再次抽離包含 CRUD 的程式碼,只針對這層虛擬層進行存取,而關於底層資料結構的變動,則直接由這一層虛擬層來負責。
  • 不要讓彈性成為效率的殺手


一般來說,網站成長到需要建立對應資料庫的虛擬層,通常已經很大了,而其中的維護工作相當費力,當然很厲害的台灣老板還是可以用非常精簡的人力進行開發維護的工作,苦命工程師們如果不想爆肝只有兩條路,一是老板增加人力,當然這是只是理論,原理很簡單卻窒礙難行,另外一條路就是從架構上再動手腳,以工具取代人工維護虛擬層運作,因此網站進一步導入 ORM 技術,也就是 Entity Framework。
  • 面子裏子都要
內涵有了,要吸引人最快的方式當然就是一張漂亮的臉蛋,漂亮也不見得成得了巨星,想要影史留名,朝演技派前進是必經之路,ASP.NET 網頁儘管可以作得很漂亮,但就是缺少了生動的靈魂,所以 Silverlight 、 Flash 就這麼進駐為單純的網頁改頭換面。
  • 說好的溝通呢


當系統發展到這裏,該追求的維護效率與開發彈性也都差不多了,只是系統膨脹到這種規模無可避免的,接下來就會產生溝通的問題,從伺服器資料庫到最前端的網頁介面,資料不可能如同一開始只有兩層時,直接在兩端來回傳送,因此進一步導入了各種溝通的機制,Web 服務、WCF 等技術根據需求被融入設計當中。

沒有最完美的架構,只有不斷演進的設計,網站就如同一個巨大的有機體,只要運作的一天,就會有維護與改進的需求,所以建構網站的技術一再的翻新,有用的沒有的技術不斷的出現,這是一條沒有盡頭的漫漫長路,所以認命吧,直到真正退休的一刻,學習都不會停止。

4 則留言:

malone 提到...

呂老師您好,
我買了您的書籍"ASP.NET商業級資料庫網站開發實務",內容很棒. 我在練習Login控制項發現它都是顯示英文,試驗過在aspx檔案中加上<%@ Page Title="" Language="C#" UICulture="zh-TW" ... />或者在web.config加上&lt globalization uiCulture ="zh-TW" / &gt,但是都沒有用! 似乎只能透過轉換成樣板然後改成中文的方式, 是否有其他更簡便的方式讓Login控制項在繁體中文的IE下自動顯示繁體中文? 謝謝您

康廷數位 提到...

hi , malone 您好:書能帶給你幫助,我們非常高興,你提到的問題,一般均是透過資源檔來作的,你可以嘗試從這個方向來試…

Google 一下很多,我一位認識的朋友也寫了一篇如下,你可以看一下:

阿源哥哥:當地語系化
http://blog.xuite.net/keigen/SoftwareFactory/36029023

malone 提到...

呂老師您好,我在練習"ASP.NET商業級資料庫網站開發實務"第8章一個完整的範例時,讀到8-21頁當中的類別、函式、屬性的上頭都有特徵項例如public class CategoryBLL上面有[System.ComponentModel.DataObject]特徵項,請問這些特徵項是使用VS2010的哪個工具造出來的? 它們似乎沒有intellisencce的支援? 如果都用手動鍵入似乎蠻累的! 也不太清楚還有那些特徵項可供使用? 請老師指點一下,謝謝您

康廷數位 提到...

hi,malone:這是內建元件,應該是有的也,這本書已經有一些時間了,我重新開起來測試是正常的,還是得請你測試一下,或查一下你的編輯器…

Good Luck :)