03-軟體系統設計
MVC架構
MVC架構風格最初是Smalltalk-80中用來構建使用者介面時採用的架構設計風格。其中M代表模型(Model),V代表檢視(View),C代表控制器(Controller)。在該風格中,模型表示待展示的物件,視圖表示模型的展示,控制器負責把使用者的動作轉成針對模型的操作。模型通過更新檢視的資料來反映自身的變化。
【說明】
某軟體企業受該省教育部門委託建設高校數字化教育教學資源共享平臺,實現以眾籌眾創的方式組織省內普通高校聯合開展教育教學資源內容建設,實現全省優質教學資源整合和共享。該資源共享平臺的主要功能模組包括:
(1)統一身份認證模組:提供統一的認證入口,為平臺其他核心業務模組提供使用者管理、身份認證、許可權分級和單點登入等功能;
(2) 共享資源管理模組:提供教學資源申報流程服務,包括了資源申報、分類定製、資料上傳、資源稽核和資源釋出等功能;
(3)共享資源展示模組:提供教育教學共享資源的展示服務,包括資源導航、視訊點播、資源檢索、分類展示、資源評價和推薦等功能;
(4) 資源元模型管理模組:依據資源型別提供共享資源的描述屬性、內容屬性和展示屬性,包括共享資源統一標準和規範、資源加工和線上編輯工具、數字水印和模板定製等功能;
(5) 系統綜合管理模組:提供系統管理和維護服務,包括系統配置、資料備份恢復、資源匯入匯出和統計分析等功能。
專案組經過分析和討論,決定採用基於Java EE的MVC 模式設計資源共享平臺的軟體架構,如圖2-1所示。
【問題1】
MVC架構中包含哪三種元素,它們的作用分別是什麼?請根據圖 2-1 所示架構將JavaEE 中 JSP、Servlet、Service、JavaBean、DAO 五種構件分別填入空 (1)~(5) 所示位置。
MVC架構包含:檢視、控制器、模型
檢視(View):檢視是使用者看到並與之互動的介面。檢視向用戶顯示相關的資料,並能接收使用者的輸入資料,但是它並不進行任何實際的業務處理。
控制器(Controller):控制器接受使用者的輸入並呼叫模型和檢視去完成使用者的需求。該部分是使用者介面與Model的介面。一方面它解釋來自於檢視的輸入,將其解釋成為系統能夠理解的物件,同時它也識別使用者動作,並將其解釋為對模型特定方法的呼叫;另一方面,它處理來自於模型的事件和模型邏輯執行的結果,呼叫適當的檢視為使用者提供反饋。
模型(Model):模型是應用程式的主體部分。模型表示業務資料和業務邏輯。一個模型能為多個檢視提供資料。
解析:
SessionBean用於實現業務邏輯,它可以是有狀態的,也可以是無狀態的。每當客戶端請求時,容器就會選擇一個SessionBean來為客戶端服務。SessionBean可以直接訪問資料庫,但更多時候,它會通過EntityBean實現資料訪問。
Entity Bean是域模型物件(用來表示真實世界的實體),用於實現O/R對映,負責將資料庫中的表記錄對映為記憶體中的Entity物件,事實上,建立一個Entity Bean物件相當於新建一條記錄,刪除一個Entity Bean會同時從資料庫中刪除對應記錄,修改一個Entity Bean時,容器會自動將EntityBean的狀態和資料庫同步。
MessageDriven Bean是EJB2.0中引入的新的企業Bean,它基於JMS訊息,只能接收客戶端傳送的JMS訊息然後處理。MDB實際上是一個非同步的無狀態SessionBean,客戶端呼叫MDB後無需等待,立刻返回,MDB將非同步處理客戶請求。這適合於需要非同步處理請求的場合,比如訂單處理,這樣就能避免客戶端長時間的等待一個方法呼叫直到返回結果。
【問題2】
專案組架構師王工提出在圖2-1所示架構設計中加入EJB構件,採用企業級JavaEE架構開發資源共享平臺。請說明EJB構件中的Bean (構件)分為哪三種類型,每種型別Bean的職責是什麼
EJB中的Bean分三種類型:Session Bean、Entity Beans 和 Message-Driven Bean。
Session Bean的職責是:維護一個短暫的會話
Entity Beans 的職責是:維護一行持久穩固的資料
Message-Driven Bean的職責是:非同步接受訊息
【問題3】
如果採用王工提出的企業 JavaEE架構,請說明下列(a)-(e) 所給出的業務功能構件中,有狀態和無狀態構件分別包括哪些。
(a)Identification Bean (身份認證構件) 有狀態
(b)ResPublish Bean(資源釋出構件) 無狀態
(c)ResRetrieval Bean(資源檢索構件) 無狀態
(d)OnlineEdit Bean(線上編輯構件) 有狀態
(e)Statistics Bean(統計分析構件) 無狀態
EJB Session Bean 有狀態和無狀態
有狀態的會話Bean,每一個會話 都是一個新的開始。而無狀態的會話Bean 每個會話用的時候都會接著用上一次的會話。
有狀態會話bean :每個使用者有自己特有的一個例項,在使用者的生存期內,bean保持了使用者的資訊,即“有狀態”;一旦使用者滅亡(呼叫結束或例項結束),bean的生命期也告結束。即每個使用者最初都會得到一個初始的bean。
無狀態會話bean :bean一旦例項化就被加進會話池中,各個使用者都可以共用。即使使用者已經消亡,bean 的生命期也不一定結束,它可能依然存在於會話池中,供其他使用者呼叫。由於沒有特定的使用者,那麼也就不能保持某一使用者的狀態,所以叫無狀態bean。但無狀態會話bean 並非沒有狀態,如果它有自己的屬性(變數),那麼這些變數就會受到所有呼叫它的使用者的影響,這是在實際應用中必須注意的。
Web系統架構設計
閱讀以下關於Web系統架構設計的敘述,在答題紙上回答問題1至問題3.
【說明】
某電子商務企業因發展良好,客戶量逐步增大,企業業務不斷擴充,導致其原有的B2C商品交易平臺己不能滿足現有業務需求。因此,該企業委託某軟體公司重新開發一套商品交易平臺。該企業要求新平臺應可適應客戶從手機、平板裝置、電腦等不同終端裝置訪問系統,同時滿足電商定期開展"秒殺"、"限時促銷"等活動的系統高併發訪問量的需求。面對系統需求,軟體公司召開專案組討論會議,制定系統設計方案。討論會議上,王工提出可以應用響應式Web設計滿足客戶從不同裝置正確訪問系統的需求。 同時,採用增加映象站點、CDN 內容分發等方式解決高併發訪問量帶來的問題。李工在王工的提議上補充,僅僅依靠上述外網加速技術不能完全解決高使用者併發訪問問題,如果訪問量持續增加,系統仍存在崩潰可能。李工提出應同時結合負載均衡、快取伺服器、Web應用伺服器、分散式檔案系統、分散式資料庫等方法設計系統架構。經過專案組討論,最終決定綜合王王和李工的思路,完成新系統的架構設計。
【問題1】
請用200字以內的文字描述什麼是"響應式 Web 設計",並列舉2個響應式Web設計的實現方式。
響應式web設計是指我們設計與開發的頁面可以根據使用者的行為和不同的裝置環境做出相應的響應來調整頁面的佈局,以提供使用者可感知的、流暢的閱讀和操作體驗。
實現方式:
(1)流式佈局
(2)彈性佈局加媒體查詢
【問題2】
綜合王工和李工的提議,專案組完成了新商品交易平臺的系統架構設計方案。新系統架構圖如圖5-1所示。請從選項 (a) - (j) 中為架構圖中(1) - (8) 處空白選擇相應的內容,補充支援高併發的Web應用系統架構設計圖。
【問題3】
根據李工的提議,新的B2C商品交易平臺引入了主從複製機制。請針對B2C商品交易平臺的特點,簡要敘述引入該機制的好處。
1、提升效能
交易平臺要求高併發,主從複製方式一主多從,不同的使用者請求可以從不同的從資料庫讀取資料,提高併發度。
2、可擴充套件性更優
如果採用單臺數據庫伺服器,則訪問量持續增加時,資料庫瓶頸暴露,且無法迅速解決問題。而主從結構可以快速增加從伺服器數量,以滿足需求。
3、提升可用性
一主多從,一臺從伺服器出現故障不影響整個系統正常工作。
4、相當於負載均衡
一主多從分擔任務,相當於負載均衡
5、提升資料安全性
系統中的資料冗餘存放多份,不會因為某臺機器硬體故障而導致資料丟失。
架構開發語言選型
閱讀以下關於應用伺服器的敘述,在答題紙上回答問題1至問題3。
【說明】
某電子產品製造公司,幾年前開發建設了企業網站系統,實現了企業宣傳、產品介紹、客服以及售後服務等基本功能。該網站技術上採用了Web伺服器、動態指令碼語言PHP。隨著市場銷售渠道變化以及企業業務的急劇拓展,該公司急需建立完善的電子商務平臺。
公司張工建議對原有網站系統進行擴充套件,增加新的功能(包括訂單系統、支付系統、庫存管理等),這樣有利於降低成本、快速上線;而王工則認為原有網站系統在技術上存在先天不足,不能滿足企業業務的快速發展,尤其是企業業務將服務全球,需要提供24小時不間斷服務,系統在大負荷和長時間執行下的穩定性至關重要。建議採用應用伺服器的Web開發方法,例如J2EE,為該企業重新開發新的電子商務平臺。
###【問題1】
王工認為原有網站在技術上存在先天不足,不能滿足企業業務的快速發展,根據你的理解,請用300字以內的文字說明原系統存在哪幾個方面的不足。
1、PHP只能實現簡單的分散式兩層或三層的架構,而JAVA在這方面就比較強大,可以實現多層的網路架構。資料庫層(持久化層)、應用(業務)邏輯層、表示邏輯層彼此分開,而且現在不同的層都已經有一些成熟的開發框架的支援。
2、PHP是面向過程的語言,Java是面向物件的,面向過程語言開發的程式只要業務流程發生變化,修改工作量很大,所以可修改性差,同時可複用性也差。
3、PHP語言在可靠性方面比J2EE平臺差,J2EE平臺有大量增強可靠性的成熟解決方案,而PHP只是一種簡單的指令碼語言,在可靠性方面缺乏成熟解決方案。
4、PHP對於不同的資料庫採用不同的資料庫訪問介面,而Java通過JDBC來訪問資料庫,通過不同的資料庫廠商提供的資料庫驅動方便地訪問資料庫,訪問資料庫的介面比較統一。所以原架構在資料庫連線方面修改起來工作量也是很大的。
5、PHP適合於小型專案,所以本專案中以前採用PHP是合適的,但目前大量功能需要增加,PHP在穩定性方面也達不到要求。
6、PHP比Java的可維護性差。
7、PHP比Java的擴充套件性差。
8、PHP比Java的安全性差。
【問題2】
請簡要說明應用伺服器的概念,並重點說明應用伺服器如何來保障系統在大負荷和長時間執行下的穩定性以及可擴充套件性。
** 【參考答案】**
應用伺服器是指通過各種協議把商業邏輯曝露給客戶端的程式。
1、若系統負荷很大,可以佈署多臺應用服務,多臺應用伺服器分擔任務,以達到效能要求。
2、應用伺服器可以通過靈活的增加伺服器完成擴充套件,所以可擴充套件性很好。
3、應用伺服器可長時間穩定執行。因為當一臺應用伺服器出現故障時,可以將當前執行的事務轉移至正常應用伺服器上完成執行,不影響業務正常執行,從而保障高可靠性與穩定性。
【問題3】
J2EE平臺採用了多層分散式應用程式模型,實現不同邏輯功能的應用程式被封裝到不同的構件中,處於不同層次的構件可被分別部署到不同的機器中。請填寫圖4-1中(1)~(5)處的空白,完成J2EE的N層體系結構。