在大學(xué)里的某一天,一個(gè)漆黑的夜晚,我來到了一個(gè)學(xué)校里陰森的圖書館,雖然說不喜歡,但是為了考試不要零蛋,所以拼死也要溫書了。來到圖書館的柜臺(tái)前,遇到了圖書管理員。然后我跟管理員說:“我來借書了”,管理員頭也不抬的把手一指:“書架在那邊,自己去找”。
--------------------------------------------------------------------------------
---------------------------------------------------------------------------------
書架實(shí)在是很多,都是分門別類的把書放好在上面的,每個(gè)書架上都有標(biāo)簽,標(biāo)明了這個(gè)書架上放的什么類型的書。
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
于是我一排排的在書架上開始瀏覽有些啥書
---------------------------------------------------------------------------------
---------------------------------------------------------------------------------
看到一本還不錯(cuò)的書,我就把書取出來,然后看看書的內(nèi)容
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
看了看,寫的不錯(cuò),于是拿著這本書去找管理員:“我要借這本啊”。管理員二話沒說,拿個(gè)本子記下來我借了這本書,然后在書上打個(gè)標(biāo)簽
------------------------------------------------------------------------------------------------
------------------------------------------------------------------------------------------------
然后我就接到了這本有用地書,然后回去溫書考試去了。
?
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以上的內(nèi)容只是一個(gè)簡單例子的模擬,而生成的類圖也是很粗略的,我們通過對業(yè)務(wù)行為的分析(經(jīng)典的借書過程來分析得到上面的圖形-為了簡單我直接用了VS的類圖,其實(shí)不是很規(guī)范,有很多建模工具可以使用, 領(lǐng)域模型的分析沒有一定之規(guī)所以可能每個(gè)人分析出來的模型并不相同 ,所以如果你覺得有其他的理由,畫成了其他的樣子,那是完全合理的),回到主題,我們要通過領(lǐng)域模型來驅(qū)動(dòng)我們的設(shè)計(jì),但是,我們要弄明白的是什么是領(lǐng)域模型的分析,適合什么地方,什么時(shí)候不適合。
領(lǐng)域模型(Domain Model)是一個(gè)商業(yè)建模范疇的概念,他和軟件開發(fā)并無一絲一毫的關(guān)系,即使一個(gè)企業(yè)他不開發(fā)軟件,他也具備他的業(yè)務(wù)模型,所有的同行業(yè)的企業(yè)他們的業(yè)務(wù)模型必定有非常大的共性和內(nèi)在的規(guī)律性,由這個(gè)行業(yè)內(nèi)的各個(gè)企業(yè)的業(yè)務(wù)模型再向上抽象出來整個(gè)行業(yè)的業(yè)務(wù)模型,這個(gè)東西即“領(lǐng)域模型”。一個(gè)掌握了行業(yè)領(lǐng)域模型的軟件公司,根本不需要再給人家開發(fā)項(xiàng)目了,根本不需要靠軟件開發(fā)養(yǎng)活自己了,你光給這個(gè)行業(yè)的企業(yè)提供業(yè)務(wù)咨詢已經(jīng)賺得非常豐厚的利潤了。
由此我們可知,領(lǐng)域模型的分析并不是我們要做這個(gè)軟件的時(shí)候要做的,而是在這個(gè)軟件所要實(shí)現(xiàn)的業(yè)務(wù)模式出現(xiàn)的時(shí)候就可以開始,所以領(lǐng)域建模比較適合需求比較固定,且業(yè)務(wù)模式比較成熟的領(lǐng)域。我們首先建立起一個(gè)領(lǐng)域模型,然后用最簡單直接的類去實(shí)現(xiàn)這個(gè)模型。這個(gè)時(shí)候我們不涉及數(shù)據(jù)庫以及持久化等等細(xì)節(jié),然后對模型進(jìn)行精化,利用設(shè)計(jì)模式將類進(jìn)行分解,將領(lǐng)域模型的類的職責(zé)用多個(gè)小類來實(shí)現(xiàn)。
比如User類,我們可以用Factory模式加上Facade模式把這個(gè)類的職能和持久化行為(數(shù)據(jù)層的行為)解耦。
其實(shí)DDD不一定就是代表著臃腫的實(shí)體類,而我們很多時(shí)候是在自己設(shè)計(jì)的時(shí)候因?yàn)閷O和設(shè)計(jì)模式的運(yùn)用不夠熟練從而設(shè)計(jì)出了臃腫的實(shí)體類(我自己其實(shí)也經(jīng)常弄出這種類出來-不過通過運(yùn)用設(shè)計(jì)模式重構(gòu),在大多數(shù)情況下是可以改變的)。作為一個(gè)合格的程序員,能夠快速的完成需求是必要的條件。但是如果只是要求能夠做出來實(shí)現(xiàn)需求,是不是對自己的要求過低了點(diǎn),我們不光是需要能跑起來的程序,還需要穩(wěn)定健壯的程序,更甚的是優(yōu)美的實(shí)現(xiàn)程序,如果僅僅是滿足于實(shí)現(xiàn)需求,借用星爺?shù)囊痪湓挘喝藳]有追求,那和咸魚有什么分別:)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
