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