1. 程式人生 > >軟體架構設計系列總結—10—表現層模式-MVC

軟體架構設計系列總結—10—表現層模式-MVC

      在前面簡述了從服務層到資料層。剩下了表現層,一個再好的中間層表現也必須有一個使用者介面,提供和使用者互動,將使用者行為輸入轉化為系統操作,進入後臺邏輯。在當下RAD(快速應用開發)工具的支援下,我們可以比較快速的完成UI設計,RAD追求所見即所得的快速反饋,快速應用。表現層也有一定其固定的邏輯(格式化,資料繫結,轉化等等,稱為UI邏輯)和介面展現。這裡UI邏輯指的是所有用來處理資料顯示在UI介面的邏輯和,將UI使用者輸入行為轉化為中間層指令的邏輯,負責UI和中間層資料流和行為的轉化。很多時候UI是最容易變化的以及最不易測試的邏輯(我一直相信,1:一段好的程式碼一定要易於測試。2:重構的前提也必須有足夠的測試保證,才能讓我們的重構更有節奏更自信),而很大部分UI邏輯卻往往比較穩定的。這Matin Fowler提出的分離表現層模式。表現層模式主要分為3種大類:MVC,MVP,PM(微軟在sl和wpf起名為MVVM),這3類模式下延伸了很多變異體mvc在web的 model2(asp.net mvc,主要特徵基於web特有uri路由)。mvp的變種:Passive View(被動檢視)和Supervising Controller(不清楚怎麼翻譯比較好),PM延伸MVVM。其目的都在於將多變的View和UI邏輯分離。

     今天要說的是MVC(model-view-controller:模型-檢視-控制器)。在我們一開始就說結構和程式設計或者面向物件原則都是為了實現模組的高內聚低耦合,而高內聚低耦合行之有效的方式就是分離關注點(SOC)。為了實現表現UI和表現邏輯的分離,使得他們之間更靈活,並且自治檢視(包含所有表現層程式碼的類)。在30年前Trygve Reenskaug提出的MVC模式,或者更確切的說模範。其將表現層分為3類:model:是檢視展現資料,view使用者互動介面,Controller:將使用者輸入轉化為中間層操作。

 模型(Model):在MVC中模型保持著一個應用程式的狀態,和相應檢視中來自使用者互動的狀態變化。在上圖中我們可以看到model會接受來之控制器的狀態變化響應和檢視的顯示狀態查詢view渲染的資料來源。同時model還有通過事件機制(觀察者模式)通知view狀態的改變要求view渲染響應。view和模型之間存在一定的耦合,view必須瞭解model,這也是MVP模式出現原因之一。正在這裡的模型model可以是來之分散式soap或者resetfull的dto(資料傳輸物件),也可以直接是我們的領域物件(do)或者資料層返回的資料集,並不嚴格的 要求。

   控制器(Controller):控制器是又view觸發,響應使用者介面的互動,並根據表現層邏輯改變model狀態,以及中間層的互動,最終修改model,Controller不會關心檢視的渲染,是通過修改model,model的事件通知機制,觸發view的重新整理渲染。控制器和模型的互動式一種“發出即忘”,或者分散式OneWay的呼叫。控制器Controller不會主動了瞭解view和view互動,除了唯一的檢視選擇外,控制器需要選擇下一次顯示的檢視view是什麼。一般控制器會請求全域性應用程式路由下一個需要顯示的view,在使其呈現出來。

檢視(View):檢視時表現層模式出現的原因,因為他的多樣性和變化的頻繁性,不易測試(太多外界環境依賴),所以理想的檢視應該儘可能的啞,被動,檢視只負責渲染呈現給使用者互動。檢視由一些列GUI元件組成,響應使用者行為觸發控制器邏輯,修改model狀態使其保持view同步。檢視並需要相應model的變化被動的接受model狀態變化重新整理相應給使用者。

   MVC最先興起於桌面,但沒有流行起來,知道在web興起後,其變異體Model2在Web中流行起來,.net 下的ASP.NTE MVC。Model2中,將來自客戶端(瀏覽器)的請求,被服務端攔截器(asp.net中HttpModule)根據url格式請求方式等轉發到固定的控制器,呼叫固定的Action,在Action中隊模型狀態進行修改,並選擇view,view並根據控制器傳來的最新model生產html,css,js前段程式碼,並輸出到前段渲染。

  在Model2中和原始MVC最大的差別在於:

1:檢視view和模型model之間沒有直接依賴,model並不知道view也不需要事件通知view,view也不需知道model,view操作的都是ViewModel(asp.net mvc 中ViewData容器)。2:控制器顯示傳入檢視資料給view,相應使用者的操作不是來自view,而是出於服務端應用程式前段的攔截器,捕獲url並轉發到相應的控制器,已經呼叫相應的action方法。

  在現在說的MVC往往指的就是Web中Model2模式。在Model2中view是被動的,啞的,簡單。

相關推薦

軟體架構設計系列總結10表現模式-MVC

      在前面簡述了從服務層到資料層。剩下了表現層,一個再好的中間層表現也必須有一個使用者介面,提供和使用者互動,將使用者行為輸入轉化為系統操作,進入後臺邏輯。在當下RAD(快速應用開發)工具的支援下,我們可以比較快速的完成UI設計,RAD追求所見即所得的快速反饋,快速

軟體架構設計原則之“KISS”的總結使用

今天聊一聊軟體架構設計中的 KISS 原則。 對! 就是親嘴的那個 “KISS”! 一定要多練習。 ... ... ... ..

一文總結軟體架構設計常用概念、原則與思想

導讀 本文一文總結軟體架構設計常用概念、原則與思想,包括面向物件六大原則,DID原則,ACID、CAP、BASE理論,中間層思想,快取思想等。 面向物件設計六大原則 一 單一職責原則(SRP): 定義是就一個類而言,應該僅有一個引起他變化的原因。也就是說一個類應該只負責一件事情; 二 開閉原則(OCP): 定

軟件架構設計學習總結(13):大型網站技術架構(七)網站的可擴展性架構

開放 擴展 修改 restfu 消息發送 封裝 nts 進行 可擴展性 擴展性是指對現有系統影響最小的情況下,系統功能可持續擴展或提升的能力。 設計網站可擴展架構的核心思想是模塊化,並在此基礎上,降低模塊間的耦合性,提供模塊的復用性。模塊通過分布式部署,獨立

軟件架構設計學習總結(14):大型網站技術架構(八)網站的安全架構

根據 知情 提交 pac 請求參數 用途 text 避免 信息加密 從互聯網誕生起,安全威脅就一直伴隨著網站的發展,各種Web攻擊和信息泄露也從未停止。常見的攻擊手段有XSS攻擊、SQL註入、CSRF、Session劫持等。 1、XSS攻擊 XSS攻擊即跨站點腳本攻擊(C

軟件架構設計學習總結(12):大型網站技術架構(六)網站的伸縮性架構

可用性 name 偶數 發送 得到 合並 linux vi 可謂 性能 網站系統的伸縮性架構最重要的技術手段就是使用服務器集群功能,通過不斷地向集群中添加服務器來增強整個集群的處理能力。“伸”即網站的規模和服務器的規模總是在不斷擴大。 1、網站架構的伸縮性設計 網站的伸縮性

軟件架構設計學習總結(23):軟件架構設計的6大原則

str 軟件架構 edge 程序員 難點 posit not 幫我 mman 1. 單一職責原則(Single Responsibility Principle - SRP) 原文:There should never be more than one reason fo

SaaS 系統架構設計經驗總結

計費 攔截 好處 abc www. ring 需求 分系統 數據庫 2B SaaS系統最近幾年都很火。很多創業公司都在嘗試創建企業級別的應用 cRM, HR,銷售, Desk SaaS系統。很多SaaS創業公司也拿了大額風投。畢竟SaaS相對傳統軟件的優勢非常明顯。 最近一

企業管理系統前後端分離架構設計 系列一 權限模型篇

-m 權限設置 auto enc 根據 當前 美的 機構 sql語句 原文:企業管理系統前後端分離架構設計 系列一 權限模型篇前段時間分別用vue和react寫了兩個後臺管理系統的模板vue-quasar-admin和3YAdmin。兩個項目中都實現了基於RBAC的權限

MySQL開源資料傳輸中介軟體架構設計實踐

本文根據洪斌10月27日在「3306π」技術 Meetup - 武漢站現場演講內容整理而成。 主要內容: 本次分享將介紹目前資料遷移、資料同步、資料消費,多IDC架構中資料複製技術所面臨問題及現有的產品和方案,並分享新開源的能在異構資料儲存之間提供高效能和強大複製功能的DTLE相關技術

02-軟體架構設計—需求與質量

軟體的屬性包括功能屬性和質量屬性,但是,軟體架構重點關注的是質量屬性。因為,在大量可能的結構中,可以使用不同的結構來實現同樣的功能性,即功能性在很大程度上是獨立於結構的,架構設計師面臨決策(對結構的選擇),而功能性所關心的是它如何與其他質量屬性進行互動,以及它如何限制其他質量屬性。

架構設計的方法學 專訪架構師周愛民:談企業軟體架構設計 C++之設計模式實現程式碼

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

若想進階為軟體架構師,這10本書必須讀!

軟體架構已經成為每一個軟體專案的重要組成部分,在構建可靠的軟體體系結構時,明確該系統最重要的組成部分,考慮這些部分如何組合在一起,並在設計這些系統時做出關鍵決策,是任何軟體開發專案的基礎 。   高階開發人員和軟體架構師之間是存在巨大差異的 。作為架構師,你需要有更多的經驗才能設計

軟體架構設計模式——23中設計模式

建立型模式 1、FACTORY—追MM少不了請吃飯了,麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西,雖然口味有所不同,但不管你帶MM去麥當勞或肯德基,只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產雞翅的Factory。 工廠模式:客戶類和工廠類分開。消費者任何時候需要某種產品

軟體架構設計的背景(架構學習二)

軟體起源以及歷程 1.最開始編寫軟體的語言為機器語言,機器語言只能識別0-1,當時的程式碼編寫就一大串0-1組成軟體程式碼。機器語言的特點是編寫難,修改難,閱讀難。 2.後來隨著時間的推移出現了組合語言,組合語言是由操作符、識別符號(symbol)、地址符(lable),進行軟體編寫,例如M

軟體架構設計-五檢視方法論

在實際工作中,我們經常聽到“架構”和“架構師”這樣的名詞,並不新鮮,但是總讓很多剛入門的 ​​​在實際工作中,我們經常聽到“架構”和“架構師”這樣的名詞,並不新鮮,但是總讓很多剛入門的人感覺很神祕,甚至是高深莫測。很少有人對“架構”有全面的瞭解和認識能並說清楚架構是什麼,更談不上掌握了。事實上,也只有極少數人

UML語言與軟體架構設計(持續更新中)

1.前言 本文是以《軟體架構設計》和《大象Think in UML》兩本書的內容為基礎進行講述,以個人的理解做了提煉和總結,旨在能夠通過本文對UML語言以及其在系統設計中的應用有一個概括性的瞭解。   2.《軟體架構設計》 圖 架構設計過程的節奏  

軟體架構設計---軟體架構風格

軟體架構風格     軟體架構設計的一個核心問題是能否使用重複的軟體架構模式,即能否達到架構級別的軟體重用。也就是說,能否在不同的軟體系統中,使用同一架構。基於這個目的,學者們開始研究和實踐軟體架構的風格和型別問題。     軟體架構風格是描述某一特定應用領域中系統組織方

軟體架構設計---層次系統架構風格

    MVP 的全稱為 Model-View-Presenter,Model 提供資料,View 負責顯示,Controller/ Presenter 負責邏輯的處理。MVP 是從經典的模式 MVC 演變而來,它們的基本思想有相通的地方:Controller/Presenter 負責邏輯的處理,Model 

軟體架構設計---構件及其複用

    軟體企業為了提高開發效率,越來越注重軟體元素的複用(也稱重用),因此,架構設計師在進行架構設計時,必須關注複用,例如,考慮豐富企業構件和充分使用已有的構件。本節從構件角度研究如何使用軟體複用技術,下一節重點討論基於產品線的軟體複用。     與複用技術密切相關的概念