一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

談.net開(kāi)發(fā)人員應(yīng)該熟悉的開(kāi)發(fā)模式

  我們總會(huì)有這樣一個(gè)經(jīng)驗(yàn):一個(gè)系統(tǒng)最不容易也最不應(yīng)該變化的部分是領(lǐng)域邏輯,最容易變化也最應(yīng)該變化的是數(shù)據(jù)的呈現(xiàn)方式。

  在Java的各種應(yīng)用中可以說(shuō)是到處可見(jiàn)mvc,j2ee貫穿mvc的概念,Android的開(kāi)發(fā)方式也是類mvc的,mvc結(jié)構(gòu)對(duì)于做過(guò)Java應(yīng)用的人而言簡(jiǎn)直就是司空見(jiàn)慣。而在.NET這邊,由于之前微軟為大家提供的各種winform、ASP.NET項(xiàng)目典范(比如那個(gè)petshop series)將“三層”概念很好的灌輸?shù)搅?NET程序員的大腦中,許多.NET開(kāi)發(fā)者凡是做個(gè)東西都要搬出自己最拿手的IModel、IDAL這樣的神器。

  其實(shí)mvc與所謂的“三層架構(gòu)”是兩個(gè)層次上的東西,前者是一種結(jié)構(gòu)模式,而后者則是分層的角度去說(shuō)。

  一件很奇怪的事情,許多人知道“三層”卻不知道m(xù)vc,其實(shí)這要?dú)w結(jié)與.NET的早期開(kāi)發(fā)技術(shù)ASP.NET和winform這些page controller的典范讓許多人對(duì)三層夸夸其談卻對(duì)mvc視而不見(jiàn)甚至一無(wú)所知。什么是page controller模式呢?搞.NET的大多都用過(guò)winform和webform,這種xxxform用起來(lái)很直觀,我們想要做一個(gè)程序,ok,最簡(jiǎn)單的方式就是拖拖拽拽幾個(gè)控件,然后在一個(gè)叫code behind的東西里寫這些UI事件的處理邏輯,加一大堆變量用于記錄數(shù)據(jù)和狀態(tài),這樣一個(gè)程序就能出爐。這種開(kāi)發(fā)方式對(duì)于一些小軟件系統(tǒng)的開(kāi)發(fā)其實(shí)效率還是蠻高的,后來(lái)人們看到其弊端---一旦修改UI,事件處理就要跟著變,但是業(yè)務(wù)還是那個(gè)業(yè)務(wù),憑什么要修改非UI的代碼?于是有人提出“三層”,最樸素的理解就是將原本那堆事件處理里的code分成業(yè)務(wù)代碼和數(shù)據(jù)庫(kù)訪問(wèn)代碼并轉(zhuǎn)移到其它類中,做多了就把那坨UI叫做UI,那坨業(yè)務(wù)代碼叫做BLL,那坨DAO叫做DAL。也就是這種架構(gòu):

image

  而對(duì)于j2ee的開(kāi)發(fā)者來(lái)說(shuō)熟悉的是下圖。 

image

  (說(shuō)明:這兩幅圖copy自是daxNET文)

  MVC是什么

  MVC是一個(gè)很經(jīng)典的結(jié)構(gòu),并且其又其思想衍生出很多變種比如MVP,MVVP。傳統(tǒng)的MVC結(jié)構(gòu)之一是這樣的(拿主動(dòng)型mvc來(lái)說(shuō)):

image

  比如web開(kāi)發(fā)(比如ASP.NET mvc或者是Java的web開(kāi)發(fā)方式),view就是純web頁(yè)面或者webservice,當(dāng)提交一個(gè)表單/調(diào)用webservice或者ajax后會(huì)將數(shù)據(jù)提交給controller(當(dāng)然期間可能會(huì)經(jīng)過(guò)各種filterchain、listener這樣的東西)controller調(diào)用相應(yīng)的業(yè)務(wù)模塊來(lái)處理這個(gè)請(qǐng)求,最終結(jié)果會(huì)更新View的顯示。

  MVP

  對(duì)于非天然mvc的框架

  對(duì)于ASP.NET/winform而言,雖然可以通過(guò)改造讓其支持mvc結(jié)構(gòu)的開(kāi)發(fā)(比如通過(guò)定制IHttpModule、IHttpHandler云云),但是在企業(yè)看來(lái)這些都算是邪門武功(因?yàn)檫@樣會(huì)喪失xxxform在開(kāi)發(fā)上的很多特性比如快速開(kāi)發(fā))。大多數(shù)使用的是mvp模式。什么是mvp呢?其實(shí)mvp是mvc的一個(gè)變種。因?yàn)橛脀inform或者webform的話form始終是個(gè)阻礙mvc開(kāi)發(fā)的問(wèn)題。那么好,我們?nèi)匀皇褂胐esigner和codebehind,其實(shí)一個(gè)架構(gòu)設(shè)計(jì)的好壞是取決于人而不是具體的技術(shù)的,只要我們OO一時(shí)強(qiáng)page controller一樣好用。

image

  在MVP模式中我們需要自己定制各個(gè)View(web頁(yè)面或者窗體)對(duì)應(yīng)的IView和IPresenter、IModel。IView要對(duì)IPresenter暴露操作UI、數(shù)據(jù)綁定的接口,IPresenter對(duì)IView要暴露當(dāng)UI事件觸發(fā)需要調(diào)用的接口,IPresenter根據(jù)IView傳遞過(guò)來(lái)的請(qǐng)求調(diào)用業(yè)務(wù)接口并根據(jù)結(jié)果操作UI。舉個(gè)簡(jiǎn)單的例子,一個(gè)計(jì)算“x+y=?”的程序。如果我們這樣定義IPresenter和IView

public interface IPresenter
{
IView View {
get; set; }
void CalculateResult();
}

public interface IView
{
IPresenter Presenter {
get; set; }
void ShowResult(string result);
int ValueOne { get; }
int ValueTwo { get; }
}

NET技術(shù)談.net開(kāi)發(fā)人員應(yīng)該熟悉的開(kāi)發(fā)模式,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 草草在线免费视频 | 福利片午夜 | 日本美女久久 | 激情综合丝袜美女一区二区 | 一级做a爰片性色毛片黄书 一级做a爰片性色毛片男 | 国产区在线观看视频 | 91九色在线观看 | 国产精品福利小视频 | 日本一区二区三区国产 | 亚洲色四在线视频观看 | 国产在线视频第一页 | 国产一级特黄在线播放 | 亚洲 激情 | 99色播| 婷婷精品 | 中文字幕久久综合 | 性感美女毛片 | 亚洲精品在线视频 | 伊人久久综合网站 | 久久91综合国产91久久精品 | 欧美成人精品久久精品 | 久久精品久 | 青青自拍视频一区二区三区 | 欧美一级激情 | 日韩欧美在线播放视频 | 狠狠综合 | 日日碰碰视频播放 | 四虎影在线永久免费观看 | 欧美日韩国产亚洲人成 | 欧洲在线免费视频 | 国产激情在线 | 日日摸人人看97人人澡 | 一级亚洲 | 萝控喷水视频 | 四虎激情影院 | 久久国产精品-国产精品 | 亚洲国产网站 | 五月婷婷开心 | 真实国产乱子伦精品一区二区三区 | 亚洲美女一级毛片 | 亚洲人精品|