真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MVC分層架構(gòu)是怎么樣的

這篇文章給大家分享的是有關(guān)MVC分層架構(gòu)是怎么樣的的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

創(chuàng)新互聯(lián)公司成立十多年來,這條路我們正越走越好,積累了技術(shù)與客戶資源,形成了良好的口碑。為客戶提供做網(wǎng)站、成都做網(wǎng)站、網(wǎng)站策劃、網(wǎng)頁設(shè)計、國際域名空間、網(wǎng)絡(luò)營銷、VI設(shè)計、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。網(wǎng)站是否美觀、功能強(qiáng)大、用戶體驗好、性價比高、打開快等等,這些對于網(wǎng)站建設(shè)都非常重要,創(chuàng)新互聯(lián)公司通過對建站技術(shù)性的掌握、對創(chuàng)意設(shè)計的研究為客戶提供一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。

傳統(tǒng)MVC三層架構(gòu)

通常,我們習(xí)慣的業(yè)務(wù)建模方式是圍繞數(shù)據(jù)表的,先根據(jù)業(yè)務(wù)需要設(shè)計數(shù)據(jù)庫,再完成業(yè)務(wù)流程的開發(fā)。

在實現(xiàn)層面采用MVC分層框架,業(yè)務(wù)數(shù)據(jù)在3個層級之間流動(數(shù)據(jù)的流動性本質(zhì))。

雖然采用了MVC分層設(shè)計,但是在業(yè)務(wù)流程實現(xiàn)上仍舊是面向過程式,通常遵循這樣的開發(fā)模式:取數(shù)據(jù) -> 處理數(shù)據(jù) -> 存儲數(shù)據(jù),是一種以數(shù)據(jù)為中心的過程式思想。

大家可以思考一下,你是不是也是這樣開發(fā)業(yè)務(wù)的?

領(lǐng)域驅(qū)動設(shè)計(DDD)

該理論提出了一種新的分層模式,核心是強(qiáng)調(diào)面向?qū)ο蟆?/p>

interfaces是表現(xiàn)層,仍舊負(fù)責(zé)數(shù)據(jù)渲染,比如渲染頁面,渲染json等等。

domain是領(lǐng)域?qū)?,是指具體的某一類實體與操作的類封裝,比如訂單與訂單相關(guān)的操作。

application是應(yīng)用層,組裝多個domain,組成一個具體的業(yè)務(wù)流程,比如交易下單流程,可能需要調(diào)用訂單、用戶、反作弊等等domain。

MVC分層架構(gòu)是怎么樣的

對于訂單來說,我們傳統(tǒng)MVC通常只把它當(dāng)做數(shù)據(jù)庫記錄,是一個”貧血模型”,里面只有訂單的各個屬性列,通過調(diào)用model層從數(shù)據(jù)庫獲取。同時,我們會寫一個service層,封裝對訂單記錄的業(yè)務(wù)操作方法,即過程式的面向數(shù)據(jù)的開發(fā)模式。

而DDD則不同,它強(qiáng)調(diào)訂單是一類實體,具體某一條訂單則對應(yīng)一個訂單對象。訂單對象具有自己的業(yè)務(wù)處理方法,數(shù)據(jù)和方法是封裝在一起的。

此時,如果創(chuàng)建訂單需要獲取用戶信息,那么就需要application層來做組裝:先獲取用戶對象,再調(diào)用訂單對象的方法傳入用戶對象來完成下單的一個流程。

application就是來做具體業(yè)務(wù)流程的一層,進(jìn)行多個domain的組裝。

MVC與DDD的結(jié)合

沒有銀彈,多參考不同的思想,目標(biāo)是如何優(yōu)化業(yè)務(wù)設(shè)計與定制高效的開發(fā)規(guī)范。

我感覺DDD本質(zhì)就是讓屬于不同領(lǐng)域的功能內(nèi)聚,然后在應(yīng)用層組裝不同領(lǐng)域的功能即可。

而反觀我們面向數(shù)據(jù)的思考方式,很容易做出這樣的事情:為了實現(xiàn)一個跨領(lǐng)域的業(yè)務(wù)流程,直接將多種不同領(lǐng)域的業(yè)務(wù)邏輯實現(xiàn)在一起,即把分屬于不同領(lǐng)域的邏輯一股腦的丟在應(yīng)用邏輯層實現(xiàn),導(dǎo)致了設(shè)計越來越混亂,復(fù)用性越來越低。

其實我們也不必完全參考DDD直接改造成面向?qū)ο蟮念I(lǐng)域設(shè)計,畢竟團(tuán)隊擅長的建模方式仍舊是圍繞數(shù)據(jù)的,而不是圍繞領(lǐng)域?qū)ο蟮摹?/p>

我們完全可以借助DDD來優(yōu)化MVC分層設(shè)計,也就是以領(lǐng)域的眼光來優(yōu)化MVC的使用。

之前在百度的時候,公司推廣PHP Yaf框架的開發(fā)規(guī)范就提到很重要的一點,即遵循如下的分層設(shè)計:

  • view

  • controller

  • page

  • service

  • model

結(jié)合DDD,我們來重新設(shè)計一下每一層要做的事情:

  • model:特定領(lǐng)域數(shù)據(jù)的數(shù)據(jù)讀寫,比如 訂單領(lǐng)域:

    • 一般來說,訂單分為主表和擴(kuò)展表,兩張表完整表達(dá)了訂單業(yè)務(wù),所以我會把它倆作為一個model實現(xiàn)。

  • service:該層與model層一一對應(yīng),說白了將model視作領(lǐng)域的數(shù)據(jù)部分(純數(shù)據(jù)),service視作領(lǐng)域的方法部分,共同組成了類似DDD中的實體,只不過我們?nèi)耘f是面向數(shù)據(jù)和過程的實現(xiàn)。

  • page:與DDD的application層對應(yīng),組裝多個service構(gòu)成業(yè)務(wù)流程,向controller返回結(jié)果。

  • controller:解析請求,組裝參數(shù),調(diào)用page完成業(yè)務(wù)流程,將page返回值進(jìn)一步加工成view需要的具體樣子。

  • view:直接渲染html或者Json等,不應(yīng)該包含其他的數(shù)據(jù)處理邏輯。

總結(jié)我的想法,service+model應(yīng)該配對出現(xiàn),page組裝多個service完成業(yè)務(wù)流程,controller只是page與view之間的協(xié)調(diào)者(不應(yīng)該有任何業(yè)務(wù)邏輯),

另外,service+model應(yīng)該按領(lǐng)域思想劃分,而不是按數(shù)據(jù)表劃分,這樣可以解決大多數(shù)的聯(lián)表需求。

對于事務(wù)需求,應(yīng)該在application層控制事務(wù)開關(guān),依舊組裝多個service完成事務(wù)內(nèi)操作,保證不同領(lǐng)域的邊界清晰。

感謝各位的閱讀!關(guān)于“MVC分層架構(gòu)是怎么樣的”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!


文章題目:MVC分層架構(gòu)是怎么樣的
文章來源:http://weahome.cn/article/giepgh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部