web開發(fā)之代碼組織探討

web后端開發(fā)的同學(xué)對MVC模型應(yīng)該都不陌生,但隨著項目復(fù)雜度的增加字旭,MVC模型的不合理使用會讓項目逐漸失控崖叫。接下來我們來探討一下如何把項目的復(fù)雜度維持在可控范圍遗淳。

首先,MVC模型本身沒什么問題心傀,它所提供的只是一種思路而已屈暗。通常情況下我們會把ORM的代碼寫到Model里面养叛,處理HTTP請求的邏輯寫到Controller里面宰翅,而返回的數(shù)據(jù)如HTML/JOSN邏輯則會寫到View里面弃甥。看起來沒啥問題汁讼,那么我們的代碼是怎么一步步變得臃腫混亂的呢淆攻?

起初,業(yè)務(wù)還很單純嘿架,一個HTTP請求打過來瓶珊,通過路由找到對應(yīng)的 Controller 方法,順帶解析出了請求參數(shù)耸彪,接著把參數(shù)直接交給Model進(jìn)行CURD伞芹,然后從Model構(gòu)建View所需要的參數(shù),最后把View的輸出作為Controller的響應(yīng)數(shù)據(jù)搜囱。后來丑瞧,業(yè)務(wù)沒那么單純了,Controller拿到數(shù)據(jù)后蜀肘,不只要進(jìn)行簡單驗證绊汹,還要去數(shù)據(jù)庫查數(shù)據(jù),檢查扮宠,然后再決定是不是要進(jìn)行下一步處理西乖,慢慢地Controller里面開始堆積大量數(shù)據(jù)庫操作即Model層的調(diào)用代碼狐榔,與此同時,View層開始有更多的展示需求获雕,往往一個頁面需要好幾個Model的數(shù)據(jù)薄腻,而且彼此間往往存在邏輯關(guān)系,漸漸地View里面也有了很多直接對Model的操作代碼届案。同樣的庵楷,在Model層,一個業(yè)務(wù)的流程通常是要涉及到多個表單的處理楣颠,所以往往有些Model有很多其他Model的操作代碼和數(shù)據(jù)格式轉(zhuǎn)換方法尽纽。而且隨著項目的演進(jìn),這種情況會越來越嚴(yán)重童漩。邊界不清晰導(dǎo)致了代碼組織的換亂弄贿。

在面相對象的編碼模式中,重要的是模塊與模塊之間的溝通而不是類本身矫膨。

對于Model層的理解偏差導(dǎo)致我們忽略了定義邊界

  1. Controller 作為HTTP的直接服務(wù)者差凹,它的任務(wù)就是解析HTTP參數(shù),調(diào)用合適業(yè)務(wù)邏輯服務(wù)侧馅,根據(jù)該服務(wù)的響應(yīng)危尿,選擇合適View服務(wù)以構(gòu)建HTTP響應(yīng)數(shù)據(jù)。Controller的邊界是對HTTP協(xié)議而言施禾,所以其 ControllerModel 應(yīng)該按照HTTP標(biāo)準(zhǔn)制定脚线。

  2. Model 層應(yīng)該改名叫數(shù)據(jù)存儲層,與數(shù)據(jù)庫交互的層應(yīng)該叫做 StoreModel弥搞,他所要關(guān)心的只是如何與數(shù)據(jù)庫進(jìn)行交互邮绿。在此之上應(yīng)該有更高層次的業(yè)務(wù)層,以業(yè)務(wù)線為單位的數(shù)據(jù)庫操作組合攀例。業(yè)務(wù)對外的邊界要形成自己的一套標(biāo)準(zhǔn)船逮,即將請求參數(shù)和返回信息的規(guī)范化,尤其要注意的是定義好業(yè)務(wù)層的錯誤與異常的分類粤铭,以便服務(wù)使用者做相應(yīng)的處理挖胃。

  3. View 層也是同樣的道理,需要一個ViewModel層來處理請求參數(shù)并構(gòu)建模板文件需要的結(jié)構(gòu)體梆惯,模板文件只是View層的最后環(huán)節(jié)酱鸭,不應(yīng)該直接與Model層進(jìn)行交互。

以上垛吗。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凹髓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子怯屉,更是在濱河造成了極大的恐慌蔚舀,老刑警劉巖饵沧,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異赌躺,居然都是意外死亡狼牺,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門礼患,熙熙樓的掌柜王于貴愁眉苦臉地迎上來是钥,“玉大人,你說我怎么就攤上這事缅叠∮缴” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵痪署,是天一觀的道長。 經(jīng)常有香客問我兄旬,道長狼犯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任领铐,我火速辦了婚禮悯森,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绪撵。我一直安慰自己瓢姻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布音诈。 她就那樣靜靜地躺著幻碱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪细溅。 梳的紋絲不亂的頭發(fā)上褥傍,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音喇聊,去河邊找鬼恍风。 笑死,一個胖子當(dāng)著我的面吹牛誓篱,可吹牛的內(nèi)容都是我干的朋贬。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼窜骄,長吁一口氣:“原來是場噩夢啊……” “哼锦募!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起啊研,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤御滩,失蹤者是張志新(化名)和其女友劉穎鸥拧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體削解,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡富弦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了氛驮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腕柜。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖矫废,靈堂內(nèi)的尸體忽然破棺而出盏缤,到底是詐尸還是另有隱情,我是刑警寧澤蓖扑,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布唉铜,位于F島的核電站,受9級特大地震影響律杠,放射性物質(zhì)發(fā)生泄漏潭流。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一柜去、第九天 我趴在偏房一處隱蔽的房頂上張望灰嫉。 院中可真熱鬧,春花似錦嗓奢、人聲如沸讼撒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽根盒。三九已至,卻和暖如春物蝙,著一層夾襖步出監(jiān)牢的瞬間郑象,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工茬末, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厂榛,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓丽惭,卻偏偏與公主長得像击奶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子责掏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

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