在公司的例會上
你的老板給你布置了一個新任務
這個任務聽起來一點也不難
你所要做的一切就是為你公司的網站建立一個
簡單
的基於Microsoft
NET的內容管理系統(CMS)
當你離開會議廳時
你可能剛剛開始覺得蹊跷
為什麼沒有人試圖得到這個任務
你甚至記起當宣布這個項目時
你的幾個同事都躲了起來
這究竟是怎麼回事?
你也許還不知道
這個新任務會逼著你必須學習許多新技術
如HTML
JavaScript
ASP
NET
C#
SQL
XML
ADO
NET
NET remoting
網絡服務等
你還需要掌握幾個概念
如n層(n
tier)體系結構
數據庫開發
版本控制
工作流(workflow)
個人化(personalization)和安全等等
無論你是否認同這一點
你無疑是得到一個好項目
因為在開發過程會逼得你學到很多東西
唯一的遺憾就是沒有人會立即認識到你在完成這個
簡單的
項目後變得多麼博學了
有一大堆文章談到建立你那個
簡單
的CMS(內容管理系統)所需要的內容
沿著這條路走下去
我們將探索與CMS開發有關的眾多技術和概念
我們在開篇文章所提到的技術在會在我們的實現樣本中一一出現
那讓我們從基本體系結構(即三層和多層體系結構)來開始本系列文章吧
CMS三層體系結構
我曾在開發CMS(內容管理系統)三層體系結構上受到好評
不過那已經是好久以前的事了
CMS三層體系結構與標准三層客戶端/服務器體系結構是基本對應的
CMS三層體系結構沒有什麼難以理解的內容
都是一些常識性的東西
它的每一層對應著一個體系結構中必須的元素
交互(interaction)
操作(manipulation)以及存儲
這三層是
表示層——處理與用戶的交互
交流
事務邏輯(business logic)層——處理用戶所需要的信息
數據庫層——存儲系統所處理的所有數據
圖A中直觀的表示了CMS三層體系結構
圖A所示的層分別位於不同的機器上
實際上
多個層可以存在於同一台計算機中
但是將它們分布在多台計算機中可以更好的分配CMS系統的負荷
CMS n層體系結構
簡單的說
CMS n層體系結構就是把CMS三層體系結構的各個層分解為多個層
如圖B所示
把層進行分解的好處是使得各個層更好的協調工作從而提高了系統性能
同時這也使得系統分布在更多的計算機上
這樣可以減少系統由於指定計算機耗時過多而造成的瓶頸
從而提高了系統負荷
表示層是什麼?
盡管表示層並不見得比其它層更重要
但是它幾乎得到了全部的榮耀——因為它是唯一的CMS用戶可以看到的層
這個層負責CMS與用戶的交互工作
表示層實際上由兩部分組成
即Web客戶端和Web服務器
Web客戶端駐留在用戶計算機中
通常用來接受Web浏覽器的表格(form)
Web服務器位於Web主機地址上
用來生成動態Web頁面和組成CMS系統的表格
Web客戶端與Web服務器端通過
請求——回應
的方式來相互通信
Web客戶端向Web服務器發出請求
Web服務器根據請求作出回應
Web客戶端使用的是HTTP的請求方式
如
GET /l HTTP/
User
Agent: Mozilla/
(compatible; MSIE
; Windows NT)
Web servers respond using the HTTP response
For example:
HTTP/
OK
Server: Microsoft
IIS/
Date: Thu
Jul
:
:
GMT
Connection: Keep
Alive
Content
Length:
Content
Type: text/html
Set
Cookie: ASPSESSIONIDQQQGQGDC=MOFPDBPCPNIBACIBDCIOFCCL; path=/
Cache
control: private
HTML嵌入了Web服務器發出的回應
該回應用來指示浏覽器顯示什麼內容
JavaScript用來實現客戶端的基本功能
最近以來
其它技術
如Java applet和ActiveX組件開始流行了
不過Web服務器在最初發出的回應中
絕大多數還是使用HTML
這包括了服務器發出的用於通知客戶端使用何種HTML以外的技術來接管後面的執行過程的回應
事務邏輯層是什麼?
重申一次
事務邏輯層的功能可以放到單個的服務器上(三層體系結構)
也可以分布到多個服務器上(n層體系結構)
事務邏輯層的功能包括以下三個部分
訪問(獲取和保存)數據庫層的數據
從表示層獲取數據
執行必要的運算並且/或者處理數據
事務邏輯層從數據庫層獲取數據
並根據表示層的需要來對數據進行處理
事務邏輯層也可以獲得表示層提供的數據
並根據數據庫層的需要對其進行處理
CMS事務邏輯層的許多邏輯與其它兩個層的交接(interfacing)有關
在Microsoft
NET下
由於ADO
NET
NET remoting和Web服務器的幫助
這種邏輯的復雜性大多都被降低了
有了
NET之後
該層的最復雜的邏輯就是用於處理事務邏輯而進行計算和處理數據任務了(用C#或者Managed C++)
什麼是數據庫層
數據庫層的名字告訴了我們它的任務是什麼了
它用來處理CMS數據
一個不太引人注意的地方就是
它的數據存儲和檢索功能並不限制於數據庫
它可以是單個或者一系列平面文件(flat file)
可能是XML格式
不過
數據通常還是存在數據庫中
數據庫的類型並不重要
因為對絕大多數CMS系統來說Microsoft SQL Server
與Oracle以及Sybase同樣優秀(至少
你在Windows環境下)
也就是說
微軟公司已經為Microsoft SQL Server
優化了
NET接口(interface)
這可能會給它一個小小的優勢(edge)
不過其它數據庫提供商也沒有閒著
微軟的這個優勢很快就會消失
如果你不偏好某種數據庫
你最好按通用的方式編寫代碼
這樣你可以把任何數據庫嵌入到你的CMS中
誰知道將來會怎樣?今年所選擇的數據庫
明年你可能就不想再用了
是不是?
數據庫層通常有它所在的計算機加載和訪問
在大型的CMS中
通常在另一台計算機上保存一個鏡像拷貝
這樣可以在主機發生故障時
可以用它來頂替
數據庫層的內部工作過程
以及數據庫本身
對一般的編程者來說是一個迷
開發者在本層的主要任務就是建立數據庫
創建並載入數據庫綱要(schema)
偶爾也需要生成報表
還有一點就是要常常備份數據庫
選擇哪一種體系結構?
選擇哪一種體系結構(三層或者n層)取決於以下因素
CMS 需要實現的功能
數據的數量
並行工作的用戶數量
預期的增長
基本上
如果你的CMS系統將一直保持較小的規模
最好選擇三層體系結構
相反
如果你估計CMS系統會越來越大
n層體系結構是一個明智的選擇
由於服務器間的通信量不高
三層體系結構更容易實現
但是在
NET中
並不一定要這麼做
由於三層體系容易構建
所以可以早日投入使用
這樣
如果市場要求很急迫
三層體系結構也可以作為大的CMS系統的暫時解決方案
把三層體系結構的方案幾乎
無痛苦
的移植到n層體系結構是可行的
不過
你要認識到
擁有大量用戶的三層體系的CMS系統很可能會超負荷的
小結
現在你應該基本理解這兩種主要用於CMS的體系結構
同時
你也應該可以科學的評估你應該使用哪一種體系結構
From:http://tw.wingwit.com/Article/program/net/201311/13137.html