色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

分享一些如何分析和設(shè)計(jì)具有動(dòng)態(tài)行為的領(lǐng)域模型的經(jīng)驗(yàn)

  好久沒(méi)有寫(xiě)文章了,最近比較忙,另一方面也是感覺(jué)自己在這方面沒(méi)什么實(shí)質(zhì)性的突破。但是今天終于感覺(jué)自己小有所成,有些可以值得和大家分享的東西,并且完成了兩個(gè)可以表達(dá)自己想法的Demo。因此,趁現(xiàn)在有點(diǎn)時(shí)間,是寫(xiě)文章和大家分享的時(shí)候了。

  首先給出這兩個(gè)Demo的源代碼的壓縮包的下載地址,因?yàn)橹坝胁┯颜f(shuō)他沒(méi)有裝VS2010而沒(méi)辦法運(yùn)行Demo,所以這次我分別用VS2008和VS2010實(shí)現(xiàn)了兩個(gè)版本。

  http://files.cnblogs.com/NETfocus/DCIBasedDDD.rar

  下面先分享一下我最近研究的一些知識(shí)及我對(duì)這些知識(shí)的自我感悟,然后再結(jié)合Demo中的示例講解如何將這些感悟應(yīng)用到實(shí)際。 

  一、理論知識(shí):

  我最近一直在學(xué)習(xí)下面這些東西:

  1. 面向?qū)ο蠓治雠c設(shè)計(jì),即Object Oriented Analysis and Design(OOA/D)
  2. 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),即Domain Driven Design(DDD)
  3. 四色原型:MI原型、Role原型、PPT原型、Description原型
  4. DCI架構(gòu):Data Context Interaction
  5. CQRS架構(gòu): 命令查詢職責(zé)分離原則,即Command Query Responsibility Segregation

  通過(guò)學(xué)習(xí)以上這些知識(shí),讓我對(duì)面向?qū)ο蟮姆治觥⒃O(shè)計(jì)、實(shí)現(xiàn)有了一些新的認(rèn)識(shí)。

  1. 碰到一個(gè)業(yè)務(wù)系統(tǒng),我們?cè)撊绾畏治鰳I(yè)務(wù),分析需求,并最后得到一個(gè)只包含業(yè)務(wù)概念的模型?答案是通過(guò)四色原型進(jìn)行業(yè)務(wù)建模。四色原型的中心思想是:一個(gè)什么什么樣的人或組織或物品或地點(diǎn)以某種角色在某個(gè)時(shí)刻或某段時(shí)間內(nèi)參與某個(gè)活動(dòng)。 其中“什么什么樣的”就是DESC,“人或組織或物品或地點(diǎn)”就是PPT,“角色”就是Role,而”某個(gè)時(shí)刻或某段時(shí)間內(nèi)的某個(gè)活動(dòng)"就是MI。更具體的說(shuō)明請(qǐng)參看我之前整理的一篇文章:四色原型的學(xué)習(xí)心得分享

  2. 業(yè)務(wù)模型建好了,該如何通過(guò)面向?qū)ο蟮姆治雠c設(shè)計(jì)方法來(lái)進(jìn)行對(duì)象建模呢? DDD和DCI思想可以幫助我們。首先,DDD能夠指導(dǎo)我們建立一個(gè)靜態(tài)的領(lǐng)域模型,該領(lǐng)域模型能夠清楚的告訴我們建立出來(lái)的對(duì)象“是什么”,但是DDD卻不能很自然的解決“做什么”的問(wèn)題。大家都知道DDD在對(duì)象設(shè)計(jì)的部分實(shí)際上是一種充血模型的方式,它強(qiáng)調(diào)對(duì)象不僅有屬性還會(huì)有行為,如果行為是跨多個(gè)領(lǐng)域?qū)ο蟮模瑒t在DDD中用領(lǐng)域服務(wù)解決。但是DDD卻沒(méi)有完整的考慮對(duì)象與對(duì)象之間的交互如何完成,雖然它通過(guò)領(lǐng)域服務(wù)的方式協(xié)調(diào)多個(gè)對(duì)象之間進(jìn)行交互或者在應(yīng)用層協(xié)調(diào)多個(gè)對(duì)象進(jìn)行交互。但是在DDD中,對(duì)象往往會(huì)擁有很多不該擁有的屬性或行為。在我學(xué)習(xí)了DCI架構(gòu)之后,我認(rèn)識(shí)到了DDD的很多不足。

  以下是DCI的核心思想: 

  • 對(duì)象扮演某個(gè)角色進(jìn)入場(chǎng)景,然后在場(chǎng)景中進(jìn)行交互,場(chǎng)景的參與者就是對(duì)象所扮演的角色;
  • 一個(gè)對(duì)象可以扮演多個(gè)角色,一個(gè)角色也可以被多個(gè)對(duì)象扮演;
  • 對(duì)象的屬性和行為分為:A. 核心屬性和行為,這些屬性或行為是不依賴于任何場(chǎng)景的;B. 場(chǎng)景屬性和行為,對(duì)象通過(guò)扮演某個(gè)角色進(jìn)入某個(gè)特定場(chǎng)景時(shí)擁有的屬性或行為,一旦對(duì)象離開(kāi)了這個(gè)場(chǎng)景,不再扮演了這個(gè)角色后,這些場(chǎng)景屬性或行為也就不再屬于該對(duì)象了;比如人有核心的屬性和行為:身高、體重、吃飯、睡覺(jué),然后當(dāng)人扮演教師的角色在教室里上課時(shí),他則具有上課的行為,一旦回到家里,就又變成了一個(gè)普通的人;比如一個(gè)物品,在生產(chǎn)時(shí)叫產(chǎn)品,在銷售時(shí)叫商品,壞了的時(shí)候叫廢品,它在不同階段扮演不同的角色所具有的屬性是不一樣的;
  • 場(chǎng)景的生命周期,場(chǎng)景是一個(gè)時(shí)間與空間的結(jié)合,可以理解為某個(gè)活動(dòng);一旦活動(dòng)結(jié)束,則場(chǎng)景也就消失;
  • DCI中的D可以理解為DDD中的領(lǐng)域模型;場(chǎng)景中交互的是角色,而不是領(lǐng)域?qū)嶓w。場(chǎng)景屬于DSL的思考層面,更接近于需求和用例。而領(lǐng)域也是偉大的出現(xiàn),但是不能為了領(lǐng)域而領(lǐng)域,為什么呢?因?yàn)閳?chǎng)景是大哥,用例是大哥。領(lǐng)域的存在是為了控制固定概念的部分,這樣在某種成度上控制了一定的復(fù)雜性和提高了可控性,而DCI則解決了可變性和需求的問(wèn)題。從某種意義上來(lái)說(shuō),“領(lǐng)域?qū)樱ㄔ贒CI中可能不會(huì)太凸顯領(lǐng)域?qū)樱蝗鏞LD, DDD那么凸顯)” 是為了DCI架構(gòu)服務(wù)的。
  • 角色是人類的主觀意識(shí),用于對(duì)象分析和設(shè)計(jì)階段,但是在運(yùn)行階段,角色和對(duì)象實(shí)體是一體的,軟件運(yùn)行過(guò)程中只有對(duì)象,只是這些對(duì)象在參與某個(gè)活動(dòng)時(shí)扮演了某個(gè)角色而已。

  3. 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中對(duì)象設(shè)計(jì)部分的一些要點(diǎn): 

主站蜘蛛池模板: 西安市| 长宁县| 开封市| 楚雄市| 安义县| 盖州市| 淮滨县| 玉龙| 襄汾县| 元江| 长岭县| 东方市| 彭山县| 六盘水市| 阳城县| 阿合奇县| 大石桥市| 乌海市| 延寿县| 新疆| 平舆县| 邓州市| 凉城县| 吉首市| 隆尧县| 嘉鱼县| 夏河县| 定安县| 陇南市| 方山县| 安庆市| 诸城市| 汉源县| 承德县| 五台县| 铜川市| 钟祥市| 冀州市| 祁门县| 团风县| 商城县|