国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

詳解MVP模式的十四條清規(guī)戒律

開(kāi)發(fā) 后端
本文將為大家講述的是.NET中的MVP模式的十四條規(guī)則,希望能對(duì)大家用好MVP模式有所幫助。

.NET程序設(shè)計(jì)不光是對(duì)于Visual Studio 2010這樣的工具使用上,或者一些小技巧。還包括一些設(shè)計(jì)理念和設(shè)計(jì)規(guī)則,這些反而是促進(jìn)程序員進(jìn)步的源泉。

之前寫(xiě)了一篇名稱(chēng)為《談?wù)勱P(guān)于MVP模式中V-P交互問(wèn)題》的文章,主要表達(dá)本人對(duì)于MVP模式下(主要針對(duì)Passive View變體)View和Presenter之間的關(guān)系,以及它們之間的交互應(yīng)該采用怎樣的原則和方式的看法。園子里的朋友對(duì)此展開(kāi)了一些討論,尤其是是一個(gè)叫做非空的朋友轉(zhuǎn)述了另一篇文章提出的關(guān)于CAB中關(guān)于MVP模式的14條規(guī)則,和本人的觀點(diǎn)有很多相似之處,當(dāng)然也有一些不一致的地方。為此,在本篇文章中,就此進(jìn)行一些必要的補(bǔ)充。

一、CAB(Componsable Application Block)基于14條MVP規(guī)則

為了讓所有的人都能夠閱讀上面提及的那篇文章,我將其轉(zhuǎn)載我個(gè)人的博客中,有興趣的讀者可以仔細(xì)閱讀(《Design Rules for Model-View-Presenter》)。文章作者提出的觀點(diǎn)和我在《談?wù)勱P(guān)于MVP模式中V-P交互問(wèn)題》中的觀點(diǎn)是一致的,即Presenter對(duì)于View應(yīng)該是相對(duì)透明的,View不能直接對(duì)Presenter進(jìn)行操作,目的是實(shí)現(xiàn)Presenter和View之間的分離(The generated code is not quite as I would like it, I prefer that the view has no knowledge of the presenter and no direct access to it either as this gives a cleaner separation between views and presenters)。文章作者傾向采用事件注冊(cè)的方式實(shí)現(xiàn)Presenter和View,不過(guò)我不太清楚具體是注冊(cè)View還是Presenter的時(shí)間。在《談?wù)勱P(guān)于MVP模式中V-P交互問(wèn)題》中對(duì)MVP的實(shí)現(xiàn)手段,我采用的是在Presenter注冊(cè)View的事件。關(guān)于View和Presenter的分離,我的做法作得更加徹底一點(diǎn)——根本就不給開(kāi)發(fā)者從View調(diào)用Presenter的機(jī)會(huì)。

文中提出了關(guān)于CAB的14條編寫(xiě)符合MVP規(guī)范的規(guī)則,在這里我特將其翻譯成中文:

1、所有的View(包括View的接口)的名稱(chēng)應(yīng)該以View作為后綴,比如TaskView/ITaskView;

2、所有的Presenter名稱(chēng)應(yīng)該以Presenter作為后綴,比如TaskViewPresenter;

3、Presenter完成Use Case處理邏輯,對(duì)GUI控件的處理應(yīng)該在View中實(shí)現(xiàn);

4、View調(diào)用Presenter的方法應(yīng)該像觸發(fā)事件異常,通過(guò)調(diào)用OnXxx方法的方式來(lái)實(shí)現(xiàn);

5、應(yīng)該盡可能地限制View對(duì)Presenter的調(diào)用,并且調(diào)用的方式限于按照“事件”的形式,比如_presenter.OnViewReady();

6、View不允許通過(guò)Presenter直接調(diào)用Model和Service,并且Presenter的方法應(yīng)該是不具有返回值的;

7、Presenter必須通過(guò)View接口的方式調(diào)用View

8、除了對(duì)View接口成員的實(shí)現(xiàn)外,View中的其他方法不應(yīng)該是public的;

9、除了CAB ModuleController 對(duì)View的加載和限制外,View只能被Presenter調(diào)用;

10、View接口方法應(yīng)該基于Use Case的邏輯起一個(gè)有意義的名稱(chēng),比如SetDataSource這樣的方法名稱(chēng)是不合法的;

11、View接口的成員應(yīng)該僅限于方法,不應(yīng)該包含屬性;

12、所有的數(shù)據(jù)應(yīng)用保持在Model中

13、定義在View接口的方法不應(yīng)該包含對(duì)GUI空間名稱(chēng)的引用(比如AddExplorerBarGroup),因?yàn)檫@會(huì)使Presenter知道View太多關(guān)于實(shí)現(xiàn)方面的細(xì)節(jié);

14、盡量讓View的方法名稱(chēng)反映Use Case的業(yè)務(wù)邏輯,這樣可以使你的代碼具有自表述性并更加易于理解。

再次回到《談?wù)勱P(guān)于MVP模式中V-P交互問(wèn)題》中討論的話題,在我看來(lái),拋開(kāi)1和2對(duì)View的Presenter命名的規(guī)范外,其余的12條規(guī)則體現(xiàn)了MVP關(guān)于View和Presenter之間應(yīng)該具有的關(guān)系,以及我們應(yīng)該采取的正確的Presenter和View交互方式。View和Presenter之間的關(guān)系,可以通過(guò)對(duì)Presenter的角色界定來(lái)體現(xiàn),在整個(gè)MVP體系中Presenter扮演的是協(xié)調(diào)者的角色。

二、Presenter是協(xié)調(diào)者,是整個(gè)MVP體系的控制中心

如果我們將MVP體系比喻成一個(gè)社團(tuán)(考慮到中國(guó)沒(méi)有黑社會(huì),這里我們說(shuō)社團(tuán)),我們經(jīng)常看見(jiàn)的往往是那些在外面接待的人,你可以將它們看成是View。也就是說(shuō)View是和外界打交道的人,是行動(dòng)者,就像是到處砍人、收保護(hù)費(fèi),以及和別的社團(tuán)搶地盤(pán)的都是這些處于社團(tuán)基層的小混混一樣。View永遠(yuǎn)處于處于幕前,和最終用戶進(jìn)行交互,但是地位卻不高。對(duì)于用戶的UI交互請(qǐng)求該如何進(jìn)行處理,View做不了主,它需要向大佬匯報(bào)。所以View永遠(yuǎn)不可能是決策者,僅僅是一個(gè)匯報(bào)者而已。

Presenter才是真正的大佬、話事人,執(zhí)龍頭杖的。Presenter生藏不露,最終用戶感知不但它的存在,就像社團(tuán)大哥大都隱藏的比較好,甚至以政府官員(比如文強(qiáng)大哥)或者是電影公司老板(比如香港的XXX電影公司)的身份出現(xiàn)。但是,我們知道,他才是整個(gè)社團(tuán)的主導(dǎo)、核心,是整個(gè)事務(wù)的決策者和執(zhí)行者,使能夠調(diào)動(dòng)相關(guān)資源的協(xié)調(diào)者,而這個(gè)事務(wù),你可以理解為Use Case。也就是說(shuō),Presenter是對(duì)Use Case的反映,UI交互邏輯的處理流程定義在Presenter中,但是具體的實(shí)現(xiàn)并不是完全在Presenter中,這一點(diǎn)很重要,下面一節(jié)中我們還會(huì)談到。

我們還是把話題回到交互上面。這里的交互,即View和Presenter之間如果溝通,是比較特別的。談到溝通,很多人都會(huì)認(rèn)為這是一個(gè)雙向的問(wèn)題,而View和Presenter采用單向的溝通方式,這和某些上下級(jí)的溝通方式有點(diǎn)類(lèi)似——下級(jí)單方地向上級(jí)匯報(bào)工作,上級(jí)單方的向下級(jí)下達(dá)命名。這在等級(jí)觀念深重社團(tuán)中更是如此,我們習(xí)慣的場(chǎng)景是這樣的:小混混向大佬說(shuō):“我們的場(chǎng)子昨天晚上被砸了,懷疑是XXX干的”。大佬說(shuō):“恩,知道了,下去吧!”。真正有前途的小混混不會(huì)說(shuō)“我們的場(chǎng)子昨天晚上被砸了,懷疑是XXX干的,我們什么時(shí)候去砍他?”。真正有范兒的大佬不會(huì)馬上命令你在什么時(shí)候、什么地點(diǎn)、帶多少兄弟去砍人,而在計(jì)劃實(shí)施的時(shí)候會(huì)向相關(guān)成員下達(dá)砍人的指令。

反映在真正View|Presenter的交互上面,就是說(shuō):View單純地將用戶的交互請(qǐng)求匯報(bào)給Presenter;Presenter接收到請(qǐng)求之后,整合相應(yīng)的資源、執(zhí)行相應(yīng)的處理邏輯。對(duì)處理流程的某一個(gè)步驟,如果設(shè)置到業(yè)務(wù)邏輯和數(shù)據(jù)模型,則調(diào)用Model,如果涉及到對(duì)GUI控件的操作,還會(huì)調(diào)用View。View將交互請(qǐng)求遞交給Presenter之后,不需要考慮后續(xù)需要做什么,因?yàn)镻resenter會(huì)在適當(dāng)?shù)臅r(shí)候命令View該如何做。

所以說(shuō),Presenter是整個(gè)體系的驅(qū)動(dòng)著,View和Presenter不應(yīng)該是一種拉的關(guān)系,而是一種推的關(guān)系。View將用戶交互請(qǐng)求推給Presenter,Presenter將數(shù)據(jù)推給View并驅(qū)動(dòng)View完成相應(yīng)的UI相應(yīng)。 正因?yàn)槿绱耍厦娴腗VP規(guī)則列表中才規(guī)定Presenter的方法不需要返回值,View的接口不需要定義屬性。實(shí)際在我個(gè)人看來(lái),Presenter和View接口都應(yīng)該只包含返回類(lèi)型為void的方法即可。

三、Presenter不關(guān)注具體的實(shí)現(xiàn)細(xì)節(jié)

談到這里有人會(huì)說(shuō),所有的關(guān)于UI處理邏輯定義在Presenter中,那么會(huì)不會(huì)使Presenter變得臃腫不堪呢?持這種觀點(diǎn)的人實(shí)際上走入了另外一個(gè)誤區(qū)。我曾經(jīng)看到過(guò)有人寫(xiě)過(guò)這樣一個(gè)極端的例子——將View的所有控件都以屬性的方式公布出來(lái),定義在View接口中,所有控件相關(guān)的操作都實(shí)現(xiàn)在Presenter中。很明顯這是不對(duì)的,雖然這個(gè)例子很極端,但是我想很多對(duì)MVP不是太了解的人或多或少會(huì)犯這種錯(cuò)誤。

在上面一節(jié)中,我們說(shuō)過(guò)UI交互邏輯的處理流程定義在Presenter中,但是具體的實(shí)現(xiàn)并不是完全在Presenter中。Presenter是藍(lán)圖的設(shè)計(jì)者,并不關(guān)注實(shí)現(xiàn)的細(xì)節(jié)。大佬只是制定行動(dòng)計(jì)劃,真正砍人、收保護(hù)費(fèi)和搶地盤(pán)這種操作性強(qiáng)的工種的還是屬于小混混們。

所以該View干的事一件也逃不了,只是View不考慮什么時(shí)候干,因?yàn)镻resenter會(huì)在適當(dāng)?shù)臅r(shí)候通知你,View得保證隨叫隨到。為了保證Presenter能夠有效地控制View,需要將這些操作定義在接口中。既然定義在接口中,操作的粒度就不能太細(xì)。Presenter關(guān)于的是整個(gè)Use Case的處理流程,所以定義在View接口中的操作也應(yīng)該采用處理流程相關(guān)的語(yǔ)言來(lái)定義。

原文標(biāo)題:大話MVP

鏈接:http://www.cnblogs.com/artech/archive/2010/04/12/1710681.html

【編輯推薦】

  1. ASP.NET MVC與WCSF中MVP模式比較
  2. ASP.NET MVC中使用View Model分離領(lǐng)域模型
  3. 使用Visual Studio 2010和MVC 2.0增強(qiáng)驗(yàn)證功能
  4. 詳解ASP.NET MVC應(yīng)用程序請(qǐng)求生命周期
  5. 詳解ASP.NET MVC數(shù)據(jù)分頁(yè)
責(zé)任編輯:彭凡 來(lái)源: 博客園
相關(guān)推薦

2012-07-12 10:44:50

Yahoo前端

2009-03-18 12:15:07

職場(chǎng)跳槽求職

2010-06-22 14:21:42

2013-04-25 14:40:08

編程

2013-04-19 09:50:51

編程編程語(yǔ)言編程經(jīng)驗(yàn)

2017-02-17 10:07:02

AndroidMVP模式實(shí)例

2012-11-13 11:26:31

遠(yuǎn)程團(tuán)隊(duì)項(xiàng)目管理團(tuán)隊(duì)管理

2017-07-06 19:57:11

AndroidMVP攜程酒店

2012-03-06 16:01:04

項(xiàng)目管理

2012-04-19 12:50:51

Java

2011-03-31 10:22:41

Java開(kāi)發(fā)

2015-07-21 08:43:47

美國(guó)航天局編碼戒律

2023-11-13 14:43:47

API接口

2011-05-30 15:59:47

編程

2010-06-22 10:00:31

SQL查詢

2010-01-21 09:08:53

.NET設(shè)計(jì)模式

2018-10-29 08:47:48

傳輸模式無(wú)線

2009-07-08 17:25:05

Java Single

2021-06-29 08:54:23

設(shè)計(jì)模式代理模式遠(yuǎn)程代理

2010-09-08 11:11:40

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

一区二区三区高清在线视频 | 欧美成熟毛茸茸| 亚洲第一搞黄网站| 91久久影院| 欧美中文字幕不卡| rebdb初裸写真在线观看| 中文字幕精品国产| 欧美一区一区| 不卡一区二区三区四区五区| 久久99最新地址| 中文字幕第38页| 色综合天天性综合| 中文在线аv在线| 欧美亚洲另类激情另类| 国产一区激情| 欧美极品欧美精品欧美| 午夜精彩视频在线观看不卡| 国产美女高潮在线观看| 91成人天堂久久成人| 一本色道久久综合亚洲精品不卡| 中文字幕精品在线播放| 亚洲欧美另类久久久精品 | 99视频在线免费| 疯狂做受xxxx高潮欧美日本 | 久久亚洲精选| 97xxxxx| 欧美日韩综合视频| 欧美成a人片在线观看久| 国产高清视频一区三区| 日本伊人色综合网| 成片免费观看视频| 亚洲国产三级网| 精品产国自在拍| av一区二区三区免费观看| 亚洲成av人**亚洲成av**| 国产桃色电影在线播放| 97av在线播放| 精彩视频一区二区三区| 久久综合色播| 亚洲人成伊人成综合网久久久| 久久av电影| 天堂8在线天堂资源bt| 色婷婷精品久久二区二区蜜臂av| 国产一区精品福利| 国产伦精品一区二区三区在线 | 欧美xxxx在线观看| 日本中文字幕在线一区| 午夜精品一区二区在线观看的| 国产精品免费视频观看| 成人影院在线看| 日本高清视频一区| hitomi一区二区三区精品| 老司机99精品99| 国产精品女视频| 久久久精品人体av艺术| 国内在线视频| 5566中文字幕一区二区| 国产精品对白交换视频| 日韩毛片免费观看| 美乳视频一区二区| 天天影视色香欲综合网老头| 亚洲成人偷拍| 日b视频免费观看| 日韩亚洲欧美一区二区三区| 久久国产精品亚洲人一区二区三区| 国产午夜伦鲁鲁| 精品亚洲夜色av98在线观看| 午夜在线视频观看日韩17c| 亚洲成人福利| 国产精品96久久久久久又黄又硬| 91尤物视频在线观看| 筱崎爱全乳无删减在线观看| 欧美久久久久久久| 色av综合在线| 99久久夜色精品国产亚洲狼| 成人看片app| 北条麻妃一区二区三区中文字幕| 久久精品二区亚洲w码| 日本视频在线免费观看| 99蜜桃在线观看免费视频网站| 亚洲综合网站在线观看| 日本午夜精品| 91麻豆福利| 国产91成人video| 中文字幕制服丝袜一区二区三区 | 神马影院我不卡| 欧美日韩精品二区第二页| 91成人国产| 午夜亚洲成人| 亚洲自拍偷拍一区| 一本色道久久综合精品竹菊| 一本一道久久综合狠狠老| 视频国产在线观看| 国产精品久久7| 3d成人h动漫网站入口| 国产日韩亚洲| www.久久ai| 中文字幕中文字幕在线中心一区| 亚洲第一页在线| 国产高清在线精品| 欧美成人三级| 久久精品影视大全| 久久久免费av| 亚洲成人av福利| 999亚洲国产精| 蜜桃av.网站在线观看| youjizz.com在线观看| 久久精品国产视频| 成人免费在线播放视频| 99精品全国免费观看视频软件| 二人午夜免费观看在线视频| 国产一区二区三区无遮挡 | 女人床在线观看| 国产一区二区免费| 国产无人区一区二区三区| av日韩在线播放| 在线看三级网站视频| 国产在线资源一区| 亚洲欧美国产视频| 中文字幕va一区二区三区| 国产欧美一区二区三区精品观看 | 欧美乱妇15p| 久久精品99国产国产精| 成人自拍视频网| 视频二区在线播放| 成人疯狂猛交xxx| 欧美一区二区三区四区视频| 国产一区二区三区美女| 精品午夜视频| 真不卡电影网| 欧美国产一二三区| 色婷婷综合久久久久中文字幕1| 国产精品对白交换视频 | 成人黄网大全在线观看| 亚洲一区二区日本| 日韩av在线看| 国产午夜精品美女毛片视频| 国产精品二区不卡| 青春草免费在线视频| 99免费视频观看| 91免费版网站在线观看| 亚洲精品一区在线观看香蕉| 国产精品看片你懂得| 亚洲欧洲一级| 久久影院一区二区三区| 每日更新在线观看av| 欧美精品久久久久久久久久久| 国产精品久久久久久中文字| 欧美日韩国产影片| 91小视频免费看| 图片区亚洲欧美小说区| 日本免费久久| h动漫在线视频| 欧美性受xxxx黑人猛交88| 欧美在线一区二区视频| 精品国产免费视频| 亚洲黄色免费电影| 精品影视av免费| 欧美一区二区三区高清视频| 乱馆动漫1~6集在线观看| 成人动漫av| 青青草国产免费| 国产一区二区三区高清| 欧美极品美女视频网站在线观看免费| 日韩欧美在线视频观看| 91日韩精品一区| 久久久久久自在自线| 国产精品入口久久| 天然素人一区二区视频| 秋霞av在线| 鲁一鲁一鲁一鲁一av| 日本成人性视频| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 天堂аⅴ在线地址8| 欧美一级黄色影院| 日本一区免费在线观看| 日本久久久久亚洲中字幕| 亚洲欧洲日韩国产| 日本久久一区二区| 国产精品三级av| 国产在线播放一区| 欧美日韩p片| 欧美美乳视频| 欧美电影院免费观看| 成人在线黄色电影| 思思99re6国产在线播放| 日本桃色视频| 中文字幕无码精品亚洲35| 亚洲成人a**址| 国产精品区一区| 成人国产精品一区| 91精品国产成人www| 久久人体大胆视频| 亚洲图片制服诱惑| 精品美女在线观看| 欧美日韩三级在线| 欧美性猛交xxxx免费看漫画| 亚洲一区二区在线观看视频| 亚洲欧洲国产专区| 国产精品女同互慰在线看|