为何要领域驱动设计?
前言
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)最近貌似開始火起來了,越來越多的人開始認(rèn)識(shí)到領(lǐng)域設(shè)計(jì)的重要性,從我做過的項(xiàng)目來看,似乎歐洲已經(jīng)有很多的公司開始實(shí)施領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)了,我看領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)也有些時(shí)間了,但是網(wǎng)上不管是文章還是代碼,都顯得太過“高大上”,一談?lì)I(lǐng)域驅(qū)動(dòng)設(shè)計(jì),一大堆的概念一股腦的給你上上來,搞的有點(diǎn)暈頭轉(zhuǎn)向,而我想在一些中小項(xiàng)目實(shí)施領(lǐng)域驅(qū)動(dòng)也遇到了不小的障礙,大家對很多東西都處于一種恐懼的狀態(tài),而且在正真開始實(shí)施時(shí),也遇到一些疑問,所以也想和大家交流學(xué)習(xí),因此開始在此寫寫對領(lǐng)域驅(qū)動(dòng)的理解,后面會(huì)有一些輕量的演進(jìn)代碼。
為何要領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)?
簡化數(shù)據(jù)存儲(chǔ)
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)有很多原因,談到我為啥要在公司推行領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),說起來還是很好玩的,因?yàn)樵瓉砘跀?shù)據(jù)驅(qū)動(dòng)的開發(fā)方式,也就是傳統(tǒng)的多層開發(fā)架構(gòu),大家定義了一堆DAL來操作數(shù)據(jù), 在.Net大家一般有兩種使用方式,一種是用ORM像Entity Framework, 另一種想使用Dapper這樣輕量級的Mapping工具,這些都要把關(guān)系型數(shù)據(jù)轉(zhuǎn)換為對象。結(jié)果導(dǎo)致以下幾種結(jié)果。
- 沒有正確的使用ORM, 導(dǎo)致數(shù)據(jù)加載過多,導(dǎo)致系統(tǒng)性能很差。
- 為了解決性能問題,就不加載一些導(dǎo)航屬性,但是卻把DB Entity返回上層,這樣對象的一些屬性為空,上層使用這個(gè)數(shù)據(jù)時(shí)根本不知道什么時(shí)間這個(gè)屬性是有值的,這個(gè)是很丑陋的是不是?
- 如是又開始使用一些輕量級的數(shù)據(jù)方法,比如使用Dapper然后自己寫SQL語句,這本來是很不錯(cuò)的方式,但是大部分人的SQL能力實(shí)在不敢恭維,大部分寫出來的SQL語句,甚至比EnityFramework生成的語句還差。
所以,我就想我們做項(xiàng)目,大部分處理的應(yīng)該是業(yè)務(wù),如何讓程序員從數(shù)據(jù)存儲(chǔ),模型轉(zhuǎn)換的大泥潭里解放出來,領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)就進(jìn)入了我的視線,當(dāng)然光從數(shù)據(jù)這個(gè)角度還不足以選擇領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),用一個(gè)NoSQL數(shù)據(jù)庫是不是就解決了? 但是NoSQL也有一些問題,比如MongoDB如何更優(yōu)雅的保證事務(wù)以及數(shù)據(jù)的一致性等。
更多了解上下文
我們很多軟件的問題,大家都知道是需求的問題,也就是客戶的需求我們很難理解準(zhǔn)確,導(dǎo)致程序員更加關(guān)注"HOW" 而忽略了"WHAT", 最終做了幾個(gè)禮拜甚至更長時(shí)間,結(jié)果客戶會(huì)說:"What?! I told you", 但是客戶告訴我的,我們理解是不一樣的。比如客戶說:“ Great job, I love you!” 這個(gè)Love肯定不是男女之間的Love, 我們拿到的是一個(gè)客戶的需求,他的上下文是什么? 比如說:“這個(gè)球打的好”, 如果是在打籃球,肯定說的事籃球,如果是在打乒乓球肯定說的是乒乓球。 而領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)里我們可以讓業(yè)務(wù)人員更多的參與系統(tǒng),更早的參與系統(tǒng)。
統(tǒng)一語言(Ubiquitous Language)
業(yè)務(wù)人員和我們使用一樣的語言,我們的程序比如讓業(yè)務(wù)盡量集中在領(lǐng)域里,比如在傳統(tǒng)的數(shù)據(jù)驅(qū)動(dòng)里,如果說Jack愛Rose, 我們一般會(huì)這么寫
C# UserService.Love(Jack, Rose)
但是我們業(yè)務(wù)人員很奇怪誰Love誰? 為什么要UserService?, 如果我們寫成下面這樣
Jack.Love(Rose)還有如果我們用
Company.hire(employee)來代替
companyservice.hire(company,employee)這樣我們就更容易讓業(yè)務(wù)人員參與進(jìn)來,而且代碼可以更易于表示真實(shí)的業(yè)務(wù)場景。
出處:http://www.cnblogs.com/cnblogsfans
總結(jié)
以上是生活随笔為你收集整理的为何要领域驱动设计?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银河币有什么用
- 下一篇: 中国银行12位账号是什么卡