在前面我們說明了一些關於ASP.NET的基礎架構,也談到了ASP.NET先天上的一些限制,接下來,讓我們從分散式架構的角度來談一下這些網際網路的開發技術。
講到網際網路的分散式架構,就不可以不談到MVC設計模式。我們在教SCWCD(Sun Certified Web Component Developer)認證課程時,都一定會介紹如何透過MVC架構設計並建立網際網路應用程式;但是在教ASP.NET的課程時,一方面是ASP.NET提供了很豐富的伺服器控制項要學,另一方面前面也提到了因為ASP.NET架構上先天的一些限制,所以要完全實作MVC設計模型也不容易。也可以能是因為這樣,所以大部分ASP.NET的開發人員都不熟悉MVC設計模式。如果你沒有這一方面的概念的話,你可以先參考下面的一些資訊:
若是要了解MVC架構的話,下面這張圖可以說明的相當清楚:
(圖片資料來源:http://java.sun.com/blueprints/patterns/MVC-detailed.html)
從這張圖你可以很清楚的看出來,ASP.NET的伺服器控制項實際上扮演的是是View與Controller的角色,因此很多開發人員就以為將資料存取與一些Domain的邏輯獨立出來,就算是完成MVC設計模式了。事實上,在JSP當中對於MVC設計模式還分為Model 1與Model 2兩種模型來探討,所謂的Model 1模型就是由JSP同時扮演View與Controller的角色-- ASP.NET預設實作的也是Model 1的模型,因此前面的做法若要說是MVC架構的話,也不能算錯。ASP.NET實作MVC Model 1的架構如下:
但Model 1模型通常用在一般的網站或是比較小型的專案,若是要講企業級分散式架構的話,就需要套用到Mode 2的模型。但是因為在ASP.NET預設的架構當中,所有顯示層的改變都需要回伺服器端透過Page與伺服器控制項來處理,造成View與Controller無法分離,因此無法實作出MVC Model 2的模型。
一般來說,目前講MVC設計模式,大多指的也是Model 2的模型。在企業級的應用程式當中,我們必須要同時兼顧到延展性、維護性與效能等等的需求;而在軟體服務化(Software as a Service,SaaS)的趨勢當中,唯有Mode 2的模型,才可以真正的幫助企業建立以服務為導向(Service-Oriented Architecture)的架構。因此我在三月份的網誌 "ASP.NET 3.5的Web API範例" 以及五月份的研討會 "建立以工作流程與訊息為導向的企業級應用程式架構" 當中,就曾經說明過這樣的設計架構。因此採用MVC設計模式,搭配WCF(Web Service)技術,我們就可以讓企業級的應用程式的使用者,透過各種不同類型的方式來存取應用程式--當然,我們只須要建立新的展示層服務就可以了,參考下圖:
而為了讓ASP.NET可以支援Model 2的MVC設計架構,因此在ASP.NET 3.5當中,內建了ASP.NET AJAX技術。透過在用戶端瀏覽器中所擴充的Microsoft AJAX Library,不僅可以非同步執行方式更新網頁,更可以直接從用戶端瀏覽器中,直接存取伺服器端的Web Service或是Page Method(其實也是一種Web Service)。因此當你將控制元件(Controller,不要說啥"控件"了) 發佈為Web Service之後,就可以同時提供給ASP.NET AJAX表單,以及其他前端的展示層技術來使用。
*** 注意一下,這裡談的ASP.NET AJAX指的是微軟官方所提供的ASP.NET AJAX架構,而非ACT (Ajax Control Toolkit)。其實在ASP.NET 3.5 技術當中,你只要學會將伺服器控制項放到UpdatePanel中使用,就已經相當夠用了。至於ACT,再怎樣強也強不過Silverlight 2.0。 |
當然,因為ASP.NET AJAX是屬於用戶端瀏覽器中的開發技術,所以也可以支援透過JavaScript來產生動態的效果。ASP.NET AJAX提供了兩種主要的開發模型:
- 整合伺服器控制項(改善使用者操作經驗)
記得我曾說過:"ASP.NET + AJAX到ASP.NET 4.0還是無敵" 的話吧! 沒錯! 因為就目前開發一般的網際網路應用程式而言,ASP.NET提供了許多支援資料繫結的伺服器控制項(GridView、ListView....等等),加上LINQ、Entity Framework等技術的支援,以及ASP.NET自己本身內鍵的一些服務,整合了ASP.NET AJAX技術之後,要開發出所謂RIA效果的資料存取表單,簡直是易如反掌,打遍天下無敵手啊!! (你可以參考 ASP.NET 3.5 GridView 範例)
- 直接存取網路服務 (做為MVC前端技術)
透過這一個模型,就可以在ASP.NET當中實現MVC架構!! 然而,Ajax Client Library在瀏覽器中必須要透過JavaScript來開發程式。但若是又回到以JavaScript為主的開發技術的話,微軟勢必沒有辦法主導其技術規格,同時競爭者也多;再者,對於開發人員而言,又要回到ASP時代,為了開發及維護伺服器端與用戶端瀏覽器中的不同技術所開發的程式,而萬分痛苦的年代........
於是乎,微軟有了一統用戶端瀏覽器中執行環境的念頭。關於這一段就請大家參閱:
Silverlight 2 講堂 -15:Silverlight 外傳(WPF篇)
(未完待續..........)
沒有留言:
張貼留言