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