繼續(xù)侃數(shù)據(jù)驅(qū)動(dòng)和模型驅(qū)動(dòng)
前天那篇blog更多的是講了下數(shù)據(jù)驅(qū)動(dòng)、模型驅(qū)動(dòng)的大致概念,今天更多的是講數(shù)據(jù)驅(qū)動(dòng)以及模型驅(qū)動(dòng)在進(jìn)行系統(tǒng)實(shí)現(xiàn)時(shí)的方法以及過(guò)程。
數(shù)據(jù)驅(qū)動(dòng)
采用數(shù)據(jù)驅(qū)動(dòng)進(jìn)行系統(tǒng)實(shí)現(xiàn)時(shí)通常采用的是一個(gè)這樣的過(guò)程,建立數(shù)據(jù)源(DataSource),同時(shí)根據(jù)業(yè)務(wù)對(duì)象模型進(jìn)行數(shù)據(jù)庫(kù)表設(shè)計(jì),在數(shù)據(jù)庫(kù)表設(shè)計(jì)完成后根據(jù)業(yè)務(wù)場(chǎng)景構(gòu)成數(shù)據(jù)集(DataSet),通常這個(gè)時(shí)候DataSet本身就是一種業(yè)務(wù)場(chǎng)景所需的業(yè)務(wù)數(shù)據(jù),在簡(jiǎn)單的情況下有可能就是對(duì)某張表的操作,復(fù)雜的情況下則是對(duì)于多張表的操作,在DataSet構(gòu)成后將此DataSet綁定到頁(yè)面即可進(jìn)行數(shù)據(jù)的展現(xiàn)了,如需對(duì)數(shù)據(jù)進(jìn)行增加、編輯、刪除同樣通過(guò)DataSet方式來(lái)進(jìn)行,這個(gè)過(guò)程基本上就是一個(gè)基于數(shù)據(jù)驅(qū)動(dòng)進(jìn)行系統(tǒng)實(shí)現(xiàn)的過(guò)程了。
模型驅(qū)動(dòng)
采用模型驅(qū)動(dòng)進(jìn)行系統(tǒng)實(shí)現(xiàn)時(shí)通常采用的是一個(gè)這樣的過(guò)程,根據(jù)業(yè)務(wù)場(chǎng)景建立業(yè)務(wù)對(duì)象,在進(jìn)行持久時(shí)持久業(yè)務(wù)對(duì)象中需要持久的屬性,對(duì)于業(yè)務(wù)場(chǎng)景的實(shí)現(xiàn)通過(guò)Facade模式對(duì)外提供統(tǒng)一接口,此接口通過(guò)與持久層進(jìn)行交互以及操作業(yè)務(wù)對(duì)象(或領(lǐng)域?qū)ο?來(lái)完成業(yè)務(wù)場(chǎng)景的實(shí)現(xiàn),而頁(yè)面則通過(guò)此領(lǐng)域?qū)ο蠡蝻@示對(duì)象來(lái)進(jìn)行數(shù)據(jù)的展現(xiàn),如需對(duì)數(shù)據(jù)進(jìn)行操作按照顯示對(duì)象--->Service Facade來(lái)完成。
從上面關(guān)于實(shí)現(xiàn)的過(guò)程的描述上來(lái)說(shuō),會(huì)覺(jué)得好像模型驅(qū)動(dòng)更為復(fù)雜,但模型驅(qū)動(dòng)較之?dāng)?shù)據(jù)驅(qū)動(dòng)的優(yōu)點(diǎn)我想不用多少,這里更重要的是我覺(jué)得是對(duì)于數(shù)據(jù)驅(qū)動(dòng)和模型驅(qū)動(dòng)的一個(gè)理解,其實(shí)數(shù)據(jù)驅(qū)動(dòng)同樣是模型驅(qū)動(dòng),呵呵,數(shù)據(jù)驅(qū)動(dòng)中的業(yè)務(wù)對(duì)象模型我們可以認(rèn)為和模型驅(qū)動(dòng)中的業(yè)務(wù)對(duì)象模型一致,其和模型驅(qū)動(dòng)的不同點(diǎn)在于數(shù)據(jù)驅(qū)動(dòng)采用DataSet的方式來(lái)實(shí)現(xiàn)業(yè)務(wù)場(chǎng)景,而模型驅(qū)動(dòng)通常采用Service Facade調(diào)用各領(lǐng)域?qū)ο髞?lái)實(shí)現(xiàn)業(yè)務(wù)場(chǎng)景,這里有一點(diǎn)非常明顯,數(shù)據(jù)驅(qū)動(dòng)只適合一種簡(jiǎn)單的業(yè)務(wù)場(chǎng)景,那就是通過(guò)數(shù)據(jù)關(guān)聯(lián)或簡(jiǎn)單的數(shù)據(jù)邏輯處理可以來(lái)實(shí)現(xiàn)的業(yè)務(wù)場(chǎng)景,而Service Facade其實(shí)對(duì)于兩者均通用,通過(guò)構(gòu)建類似DataSet的數(shù)據(jù)關(guān)聯(lián)或簡(jiǎn)單的數(shù)據(jù)邏輯處理通過(guò)和持久層交互即同樣達(dá)到了如此的目的,^_^,而且這種方式對(duì)于復(fù)雜的業(yè)務(wù)場(chǎng)景同樣可以實(shí)現(xiàn),通過(guò)領(lǐng)域?qū)ο蟮慕换ゼ纯赏瓿桑贒ataSet方式中這個(gè)步驟是比較棘手的,雖然也可以處理,但會(huì)帶來(lái)的問(wèn)題就是重復(fù)代碼的增多以及可維護(hù)性的降低,其實(shí)關(guān)鍵的問(wèn)題就是其沒(méi)有形成對(duì)象,內(nèi)聚性不夠強(qiáng)。
我的觀點(diǎn)仍然是數(shù)據(jù)驅(qū)動(dòng)是一種退化的模型驅(qū)動(dòng)或者說(shuō)變相的模型驅(qū)動(dòng),數(shù)據(jù)驅(qū)動(dòng)中根據(jù)業(yè)務(wù)對(duì)象模型進(jìn)行數(shù)據(jù)庫(kù)表設(shè)計(jì)的這個(gè)過(guò)程可以映射為在模型驅(qū)動(dòng)中進(jìn)行業(yè)務(wù)對(duì)象模型實(shí)現(xiàn)的過(guò)程,而建立數(shù)據(jù)集的過(guò)程則和模型驅(qū)動(dòng)中的Service Facade頗為相似,只是其Service Facade中的方法比較簡(jiǎn)單,至于DataSet綁定到頁(yè)面這個(gè)過(guò)程其實(shí)和模型驅(qū)動(dòng)中將領(lǐng)域?qū)ο蠡蝻@示對(duì)象和頁(yè)面綁定是相同的概念。
模型驅(qū)動(dòng)思想才是王道, ,需要的僅僅是架構(gòu)體系中對(duì)于數(shù)據(jù)驅(qū)動(dòng)這種變相的模型驅(qū)動(dòng)也提供一個(gè)良好的支持,其實(shí)我覺(jué)得通過(guò)上面的描述已經(jīng)可以看到要去做出這個(gè)支持是非常簡(jiǎn)單的一件事,抽象形成通用Service Facade以及考慮如何建立DataSet即完成了這個(gè)實(shí)現(xiàn),而且這樣的架構(gòu)對(duì)于模型驅(qū)動(dòng)同樣支持,^_^,何樂(lè)而不為,魚和熊掌均可得之(其實(shí)就只有熊掌,只是一個(gè)可能是肥壯一些的,一個(gè)是瘦弱一些的,^_^)。
posted on 2005-11-25 21:47 BlueDavy 閱讀(3891) 評(píng)論(5) 編輯 收藏 所屬分類: 系統(tǒng)設(shè)計(jì)