常用的開發(fā)模式介紹

記得很多年前從C#深啤,WebForm開始開發(fā)企業(yè)應(yīng)用茬祷,很少了解為何要這樣進(jìn)行開發(fā)谤狡,但是這種模式確實(shí)比較簡(jiǎn)潔而直觀厂抖。其實(shí)不管是什么開發(fā)模式終歸總結(jié)起來(lái)無(wú)非三種茎毁。

  • Model First(模型優(yōu)先)

    這種開發(fā)模式最先起源于瀑布模型,按部就班從需求開始忱辅,然后進(jìn)行設(shè)計(jì)七蜘,開發(fā),測(cè)試墙懂,部署橡卤,上線。
    需求收集完成后進(jìn)行UE設(shè)計(jì)损搬,這個(gè)UE設(shè)計(jì)過(guò)程中其實(shí)就是我們所說(shuō)的Model First碧库,即最開始進(jìn)行業(yè)務(wù)建模,后面所有活動(dòng)圍繞者模型展開巧勤,比如數(shù)據(jù)庫(kù)設(shè)計(jì)嵌灰,編碼等

  • Code First(編碼優(yōu)先)

    軟件發(fā)展的中期,鑒于瀑布模型的低效颅悉,人們提出如果簡(jiǎn)化開發(fā)模式提高開發(fā)效率的方式沽瞭,比如:敏捷開發(fā)模型,極限編程剩瓶,這種模型的理念就是將項(xiàng)目進(jìn)行拆解秕脓,項(xiàng)目中所有的角色都是非常有溝通能力而且能夠并行作戰(zhàn)的能力,需求儒搭,開發(fā)吠架,測(cè)試可以同時(shí)進(jìn)行,開發(fā)和測(cè)試人員都是比較經(jīng)驗(yàn)豐富的人員搂鲫,一般采用測(cè)試驅(qū)動(dòng)的方式一邊了解需求傍药,一邊進(jìn)行編碼,在溝通和了解過(guò)程不斷完善現(xiàn)有模型和編碼,測(cè)試用例最終達(dá)到實(shí)現(xiàn)迭代需求的目標(biāo)拐辽,這種開發(fā)模型對(duì)于開發(fā)角色來(lái)說(shuō)就是編碼優(yōu)先的開發(fā)模型拣挪。

  • Database First(數(shù)據(jù)庫(kù)優(yōu)先)

    所謂 Database First,意思是數(shù)據(jù)庫(kù)優(yōu)先俱诸,指的是在設(shè)計(jì)和開發(fā)系統(tǒng)時(shí)菠劝,優(yōu)先和重點(diǎn)做的工作是創(chuàng)建數(shù)據(jù)庫(kù)結(jié)構(gòu),然后去實(shí)現(xiàn)業(yè)務(wù)睁搭。傳統(tǒng)的瀑布模型在進(jìn)行需求設(shè)計(jì)之后赶诊,要進(jìn)行系統(tǒng)設(shè)計(jì),系統(tǒng)設(shè)計(jì)的工作就包括了數(shù)據(jù)庫(kù)的設(shè)計(jì)园骆,對(duì)于瀑布模型來(lái)說(shuō)其實(shí)數(shù)據(jù)庫(kù)設(shè)計(jì)和UE設(shè)計(jì)可以并行進(jìn)行舔痪,如果是數(shù)據(jù)庫(kù)設(shè)計(jì)工作優(yōu)先進(jìn)行,可以根據(jù)數(shù)據(jù)庫(kù)設(shè)計(jì)來(lái)生成UE界面和代碼锌唾。

以上模式?jīng)]有孰優(yōu)孰劣之分锄码,選擇什么開發(fā)模型取決于項(xiàng)目復(fù)雜度和團(tuán)隊(duì)的開發(fā)能力,有些團(tuán)隊(duì)會(huì)選擇多種開發(fā)模型同時(shí)進(jìn)行晌涕。原因在于Model First的開發(fā)方式以界面優(yōu)先滋捶,如果依據(jù)模型來(lái)生成數(shù)據(jù)庫(kù)或者代碼,這種模式對(duì)需求和設(shè)計(jì)人員對(duì)業(yè)務(wù)的了解能力要求非常高余黎,如果模型設(shè)計(jì)的不夠精細(xì)或者抽象重窟,或者模型設(shè)計(jì)與實(shí)際模型相違背時(shí),那么對(duì)于后面的工作將是災(zāi)難驯耻,這種模型也不便于重用,所以有些團(tuán)隊(duì)優(yōu)先會(huì)選擇DataBase First或者Code First來(lái)進(jìn)行開發(fā)炒考。

從ORM開始談三種開發(fā)模型

主流的企業(yè)應(yīng)用開發(fā)工具還是java和.net可缚,java的ORM眾多,國(guó)人偏愛(ài)MyBatis斋枢,MyBatis不支持Code First帘靡,所以在國(guó)內(nèi)最常見(jiàn)的開發(fā)模式還是Model First,Database First瓤帚,對(duì)于.net 陣營(yíng)來(lái)說(shuō)微軟一般擅長(zhǎng)于一手包辦描姚,其看家工具之一EF三種模式都支持,微軟使用它與java的Hibernate進(jìn)行對(duì)標(biāo)戈次,并且其擁有Hibernate所不具備的過(guò)人之處轩勘。

那么java如何實(shí)現(xiàn)code first模式?答案就是Spring全家桶的JPA怯邪,JPA在國(guó)外使用的相對(duì)較多绊寻,由于MyBatis能夠定制SQL,所以對(duì)SQL查詢性能相對(duì)比較友好,JPA和Hibernate一樣對(duì)數(shù)據(jù)庫(kù)訪問(wèn)高度封裝澄步,不具備SQL調(diào)優(yōu)能力冰蘑,如果要二選一,對(duì)于國(guó)內(nèi)數(shù)據(jù)量相對(duì)來(lái)說(shuō)較大的情況下一般會(huì)優(yōu)先選擇MyBatis這種ORM框架村缸。其實(shí)根據(jù)馬大師的理論祠肥,我們可以在項(xiàng)目上使用CQS模式,即寫入可以使用一套ORM梯皿,讀取可以使用另外一套ORM仇箱。但是基于維護(hù)成本考慮,很少有人這樣選擇罷了索烹,或者架構(gòu)們很少具備這樣的意識(shí)吧工碾。

從開發(fā)語(yǔ)言開始談三種開發(fā)模型

.net

主要是Web Forms和MVC兩種模式

Web Forms

Web Forms是用戶使用瀏覽器請(qǐng)求的頁(yè)面。 可以使用 HTML百姓、客戶端腳本渊额、服務(wù)器控件和服務(wù)器代碼的組合編寫這些頁(yè)面。 當(dāng)用戶請(qǐng)求頁(yè)面時(shí)垒拢,框架會(huì)在服務(wù)器上對(duì)其進(jìn)行編譯和執(zhí)行旬迹,然后框架會(huì)生成瀏覽器可以呈現(xiàn)的 HTML 標(biāo)記。 ASP.NET Web Forms頁(yè)在任何瀏覽器或客戶端設(shè)備中向用戶顯示信息求类。

ASP.NET MVC

微軟提供的以MVC模式為基礎(chǔ)的ASP.NET Web應(yīng)用程序開發(fā)框架奔垦。

MVC 模式分別為:

  • Model:領(lǐng)域模型 處理應(yīng)用程序數(shù)據(jù)邏輯部分,獲取數(shù)據(jù)尸疆,處理數(shù)據(jù)

  • View:視圖 用于處理實(shí)際返回給用戶的頁(yè)面

  • Controller:控制器 通過(guò)Model 讀取處理數(shù)據(jù)椿猎,通過(guò)View 將結(jié)果返回。

兩者的區(qū)別和各自優(yōu)缺點(diǎn)

Web Forms 優(yōu)點(diǎn)

它支持通過(guò) HTTP 保留狀態(tài)的事件模型寿弱,這有益于開發(fā)業(yè)務(wù)線 Web 應(yīng)用程序犯眠。 基于 Web 窗體的應(yīng)用程序提供了在數(shù)百個(gè)服務(wù)器控件中受支持的許多事件。
它使用頁(yè)面控制器模式向單個(gè)頁(yè)面添加功能症革。 有關(guān)詳細(xì)信息筐咧,請(qǐng)參閱 頁(yè)面控制器。
它使用視圖狀態(tài)或基于服務(wù)器的表單噪矛,這使得管理狀態(tài)信息變得更加容易量蕊。
它非常適合想要利用大量組件快速開發(fā)應(yīng)用程序的 Web 開發(fā)人員和設(shè)計(jì)人員的小型團(tuán)隊(duì)。
通常艇挨,應(yīng)用程序開發(fā)不太復(fù)雜残炮,因?yàn)?頁(yè)面類、 控件等 (組件) 緊密集成缩滨,并且通常比 MVC 模型所需的代碼更少吉殃。

Web Forms 缺點(diǎn)

正是由于封裝程度高辞居,Web Forms非常難擴(kuò)展,開發(fā)人員便利了解內(nèi)部運(yùn)行原理蛋勺,不容易被測(cè)試瓦灶。同時(shí)控件的ViewState 增加了網(wǎng)站服務(wù)器的傳輸量,一定程度上影響程序的效率抱完。

ASP.NET MVC 優(yōu)點(diǎn)

通過(guò)將應(yīng)用程序分為模型贼陶、視圖和控制器,化繁為簡(jiǎn)的工作更加輕松巧娱。
它不使用視圖狀態(tài)或基于服務(wù)器的窗體碉怔。 這使得 MVC 框架特別適合想要完全控制應(yīng)用程序行為的開發(fā)人員。
它使用一種通過(guò)單一控制器處理 Web 應(yīng)用程序請(qǐng)求的前端控制器模式禁添。 這使您可以設(shè)計(jì)一個(gè)支持豐富路由基礎(chǔ)結(jié)構(gòu)的應(yīng)用程序撮胧。 有關(guān)詳細(xì)信息,請(qǐng)參閱 前端控制器老翘。
它為測(cè)試驅(qū)動(dòng)的開發(fā) (TDD) 提供了更好的支持芹啥。
它適用于需要高度控制應(yīng)用程序行為的大型開發(fā)人員和 Web 設(shè)計(jì)人員團(tuán)隊(duì)支持的 Web 應(yīng)用程序。

ASP.NET MVC 缺點(diǎn)
  • 增加了系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)的復(fù)雜性铺峭。對(duì)于簡(jiǎn)單的界面墓怀,嚴(yán)格遵循MVC,使模型卫键、視圖與控制器分離傀履,會(huì)增加結(jié)構(gòu)的復(fù)雜性,并可能產(chǎn)生過(guò)多的更新操作莉炉,降低運(yùn)行效率钓账。

  • 視圖與控制器間的過(guò)于緊密的連接。視圖與控制器是相互分離絮宁,但確實(shí)聯(lián)系緊密的部件梆暮,視圖沒(méi)有控制器的存在,其應(yīng)用是很有限的羞福,反之亦然惕蹄,這樣就妨礙了他們的獨(dú)立重用蚯涮。

  • 視圖對(duì)模型數(shù)據(jù)的低效率訪問(wèn)治专。依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)遭顶。對(duì)未變化數(shù)據(jù)的不必要的頻繁訪問(wèn)张峰,也將損害操作性能。

  • 一般高級(jí)的界面工具或構(gòu)造器不支持MVC模式棒旗。改造這些工具以適應(yīng)MVC需要和建立分離的部件的代價(jià)是很高的喘批,從而造成使用MVC的困難撩荣。

簡(jiǎn)單來(lái)說(shuō),不同框架的選擇也是在于你對(duì)項(xiàng)目開發(fā)的權(quán)衡饶深,如果選擇Web Forms雖然開發(fā)效率高餐曹,但是其擴(kuò)展性較差,如果項(xiàng)目需求變更頻繁敌厘,建議還是選擇MVC較好台猴。

對(duì)于Web Forms來(lái)說(shuō)由于其高度封裝了業(yè)務(wù)邏輯和抽象了web業(yè)務(wù),但是邏輯與控件事件耦合嚴(yán)重俱两,不利于擴(kuò)展和后續(xù)維護(hù)饱狂,對(duì)業(yè)務(wù)人員較友好,所以其更適合基于Model First的開發(fā)模式宪彩,而相對(duì)于MVC休讳,事件模型交給前端,后端解耦合徹底尿孔,使用Code First或者Database First更容易上手俊柔,其門檻也相對(duì)較高。

java

java 也有像.net一樣基于事件驅(qū)動(dòng)框架的實(shí)現(xiàn)纳猫,java swing ,flex 等婆咸,這些都屬于非主流框架,不成氣候芜辕,所以其企業(yè)業(yè)務(wù)一般拱手想讓.net尚骄,java還是擅長(zhǎng)于做大數(shù)據(jù)高并發(fā)的互聯(lián)網(wǎng)的業(yè)務(wù)。如果用java開發(fā)企業(yè)類項(xiàng)目侵续,主流還是SSM倔丈,SSH,SSJ等状蜗,和.NET MVC一樣需五,使用Code First或者Database First則更容易上手。

從低代碼平臺(tái)談三種開發(fā)模式

之前介紹過(guò)很多低代碼平臺(tái)轧坎,其實(shí)不管是商用還是開源的低代碼平臺(tái)其開發(fā)模式無(wú)非是我們上面介紹的這些宏邮,只不過(guò)是低代碼平臺(tái)又從業(yè)務(wù)或者框架上做了一些抽象,以及在犧牲了一些擴(kuò)展性的前提下提高了開發(fā)效率缸血,對(duì)于需要靈活抽象度沒(méi)有那么高的業(yè)務(wù)或者需要靈活擴(kuò)展的業(yè)務(wù)使用原生開發(fā)模式和低代碼開發(fā)工具其實(shí)差異不大蜜氨,而低代碼來(lái)說(shuō)可能還附帶了一定的學(xué)習(xí)成本。主流的低代碼模式主要有下面兩種

  1. 基于前端的控件模型捎泻,主要業(yè)務(wù)交互業(yè)務(wù)在前端實(shí)現(xiàn)飒炎,后端提供API接口返回?cái)?shù)據(jù),其本質(zhì)還是一種前后端分離的架構(gòu)
  2. 基于后端的元數(shù)據(jù)驅(qū)動(dòng)模型笆豁,主是的實(shí)現(xiàn)的方式是后端組裝前端需要的元數(shù)據(jù)到前端郎汪,前端將根據(jù)元數(shù)據(jù)來(lái)渲染前端界面赤赊,和CMS的原理類似。

不管是哪種方式煞赢,由于低代碼和Web Forms的實(shí)現(xiàn)類似抛计,決定于其對(duì)于Model First的開發(fā)模式更為友好,其同時(shí)繼承了Web Forms開發(fā)模式的優(yōu)缺點(diǎn)照筑。低代碼平臺(tái)定位為開發(fā)技能不熟練或者不具備技術(shù)背景的項(xiàng)目實(shí)施或用戶爷辱,所謂魚和熊掌不可兼得,注定其耦合性較高的特性朦肘,不利于后續(xù)維護(hù)和擴(kuò)展饭弓。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市媒抠,隨后出現(xiàn)的幾起案子弟断,更是在濱河造成了極大的恐慌,老刑警劉巖趴生,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阀趴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苍匆,警方通過(guò)查閱死者的電腦和手機(jī)刘急,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)浸踩,“玉大人叔汁,你說(shuō)我怎么就攤上這事〖焱耄” “怎么了据块?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)折剃。 經(jīng)常有香客問(wèn)我另假,道長(zhǎng),這世上最難降的妖魔是什么怕犁? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任边篮,我火速辦了婚禮,結(jié)果婚禮上奏甫,老公的妹妹穿的比我還像新娘戈轿。我一直安慰自己,他們只是感情好扶檐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布凶杖。 她就那樣靜靜地躺著胁艰,像睡著了一般款筑。 火紅的嫁衣襯著肌膚如雪智蝠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天奈梳,我揣著相機(jī)與錄音杈湾,去河邊找鬼。 笑死攘须,一個(gè)胖子當(dāng)著我的面吹牛漆撞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播于宙,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼浮驳,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了捞魁?” 一聲冷哼從身側(cè)響起至会,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谱俭,沒(méi)想到半個(gè)月后奉件,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昆著,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年县貌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凑懂。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡煤痕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出接谨,到底是詐尸還是另有隱情杭攻,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布疤坝,位于F島的核電站兆解,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏跑揉。R本人自食惡果不足惜锅睛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望历谍。 院中可真熱鬧现拒,春花似錦、人聲如沸望侈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)脱衙。三九已至侥猬,卻和暖如春例驹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背退唠。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工鹃锈, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞧预。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓屎债,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親垢油。 傳聞我的和親對(duì)象是個(gè)殘疾皇子盆驹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容