模式與架構系列之一 MVC

2022-03-12 14:18:39 字數 3511 閱讀 9821

1.mvc

架構

model-view-controller (mvc)

架構模式,可以分解為以下三個部件:

模型:封裝業務邏輯;

檢視:即介面

(這裡不啃概念);

控制器:在檢視與控制器間傳遞訊息,使模型和檢視協調工作。

在理想狀況

下,這種架構模式帶來的好處是令人心動的。由於介面與業務邏輯的分離,降低了依賴性,使得邏輯**可以完整地、輕鬆地被摘下來,用於別處。

同時,控制器使用訊息分發,可以輕易實現同時對多個介面產生影響。

當然,這是理想狀況

2.

乙個

mvc

示例

mvc模組的簡要類圖:

類實現isender

、ireceiver

介面,可傳送及接收訊息,作為

model

類的基類;(2

)viewelement

類繼承自

form

類,並實現

isender

、ireceiver

介面,可傳送及接收訊息,作為

view

類的基類;(3

)controllerelement

類實現isender

、ireceiver

、icontroller

介面,可傳送、接收及分發訊息,作為

controller

類的基類。

配置檔案:

為了控制器最終能正確有效地向特定的乙個或若干個

view

或model

分發訊息,系統用乙個

xml檔案用於儲存

model

、view

、controller

三者的關係,即完成所謂「註冊」的功能,該

xml檔案結構類似如下:

xxproj.mainform

mainform

xxproj

indicontroller

view

xxproj.activegrpcalllist

activegrpcalllist

xxproj

grpcallcontroller

view

xxproj.indicallmodel

indicallmodel

xxproj

indicontroller

model

xxproj.grpcallmodel

grpcallmodel

xxproj

grpcallcontroller

model

…………

mvc模式下訊息傳遞流程:

下面是乙個操作的訊息傳遞(呼叫)流程:

該操作的實際**類似如下:

主介面(

view

)mainform

中:private void startschematoolstripmenuitem_click(object sender, eventargs e)

在mainform

的父類viewelement

中,sendmsg()

方法實際上是通過乙個被稱為「傳送**

」sendproxy

來發出訊息:

public objectdictionary sendmsg(string strmsgheader, objectdictionary dicmsgcontent)

在傳送**

sendproxy

中,呼叫

mainform

所屬的控制器的

distributemsg()

方法:public objectdictionary sendmsg(string strmsgheader, objectdictionary dicmsgcontent)

在mainform

所屬的控制器

indicontroller

中,方法

distributemsg()

具有如下**

public override objectdictionary distributemsg(string strmsgheader, objectdictionary dicmsgcontent)}}

其中elementfactory.getview("startschemawizard1form")

利用c#

中的反射機制返回類

startschemawizard1form

的乙個物件

(此時須用到上述的

xml配置檔案,以便在構造物件時傳入其所屬的控制器

)。最終實現介面變化的**則位於目標

view

(即startschemawizard1form

)的receivemsg()

方法中,這樣,乙個操作最終完成。

public override objectdictionary receivemsg(string strmsgheader, objectdictionary

dicmsgcontent)

return null;

}3.最後

以上示例是曾經被實際應用過的

mvc,寫作的人恐怕也是參考了網上的例子,所以可能難免有些似曾相識。

關於它的訊息流程,你也可以很直白地將它理解為:將乙個直接的函式呼叫

拆分為兩步,先呼叫控制器的相應方法,再經由控制器呼叫位於檢視中的方法。

(或者從檢視到控制器到模型

)所謂的訊息,不過是些字串,通過這些字串來標識所要呼叫的目標。

我在使用過程中遇到乙個比較明顯的問題,那就是除錯

,遠不如分層架構那麼直觀,特別是當由控制器分發出來的是「非同步訊息」(

所謂非同步即訊息發出之後直接返回,不需等待目標方法完成

)時,更加難以跟蹤除錯。當然,這可能跟架構作者和使用者的程式設計水平都有關係。

菜鳥我對mvc的理解還是比較膚淺的,只是簡單說說自己看到的和自己體會到的,大大們多多批評指正,萬勿笑話。

MVC架構模式與xib

mvc架構模式 m model,模型,儲存資料 v view,檢視,顯示控制項及資料 c controller,控制器,傳遞資料,管理檢視 xib1 xib檔案是一種自定義檢視。2 建立方法 file new file,選擇ios user inte ce view empty。3 好處 可以先設計...

MVC 架構模式

mvc架構模式 模型 檢視 控制器 model view controller 模型 模型代表應用程式的資料以及用於訪問控制和修改這些資料的業務規則,當模型發生改變時,它會通知檢視,並為檢視提供查詢模型相關狀態的能力.同時,它也為控制器提供訪問封裝在模型內部的應用程式功能的能力.檢視 檢視用來組織模...

MVC架構模式

m model 資料管理 如資料庫訪問 v view 資料顯示 介面 c controller 控制響應策略 組成mvc的三種模式 組合模式 策略模式 觀察者模式 view層實現了組合模式 通過樹狀結構組織介面控制項物件。model和view層,實現了觀察者模式 model是被觀察的物件,view是...