Domain Model:
特點(diǎn):
有一系列的實(shí)體對象,每個(gè)對象不只包含數據更重要的包含各自的行為責任。每個(gè)對象只做自己的事情,多個(gè)對象通過(guò)協(xié)作共同完成一件事情??梢猿浞职l(fā)揮面向對象和模式的作用。 很符合面向對象的特性。
優(yōu)點(diǎn):
處理復雜多變的系統有很大優(yōu)勢,可以很好發(fā)揮(Gof)模式的作用。
缺點(diǎn):
O/R mapping 是件比較麻煩的事。
說(shuō)明:
有兩種風(fēng)格的Domain Model:
1. 每個(gè)對象對應于數據庫中的表中一行。 Active Record模式
2. 有很多的對象(由于使用繼承和模式,比如一個(gè)接口,多個(gè)實(shí)現類(lèi)) Data Mapper模式
一系列的實(shí)體對象如何存儲需要仔細考慮,一些簡(jiǎn)單的應用可以將他們從數據庫中全部載入,如果對象很多,那么有時(shí)需要按需載入。如果是服務(wù)器上的對象那么還要考慮使用session進(jìn)行管理。同時(shí)O/R mapping 也是一個(gè)要注意的問(wèn)題。
使用Domain Model很容易引起對象臃腫。比如為了讓Contract對象可以在UI中被操作,那么就需要在Contract類(lèi)中添加專(zhuān)門(mén)的函數,如此一般對象就容易變的很大。這時(shí)候可以考慮將一些通用的操作提到專(zhuān)門(mén)的類(lèi)中,甚至提到其他層,比如UI層。但是如果提到其他地方,人們有時(shí)就會(huì )忽略它,以致再寫(xiě)一次,產(chǎn)生不必要的重復。Martin建議還是放在原來(lái)的類(lèi)中,因為這種對象臃腫的現象往往比預期的少,就算發(fā)生也容易發(fā)現并修改。
此處Martin還提到了EJB,個(gè)人不是太了解,總之他覺(jué)得EJB1.0不太好,建議使用POJO(plain old java objects)就是常見(jiàn)的自定義的java對象。除非是那種小的對象系統,比如沒(méi)怎么用到繼承,模式的系統可以使用EJB中的Entity Bean。
他還提到Entity Bean不能re-entrant,這是它的主要缺陷。(誰(shuí)來(lái)解釋一下,我看的一知半解)而且CMP的O/R mapping也是支持有限。不過(guò)他對EJB2.0好像評價(jià)不錯,現在3.0都出來(lái)了,哪位高人介紹一下啊。
涉及模式:
簡(jiǎn)單類(lèi)結構Active Record 復雜用到多態(tài)和模式的類(lèi)結構DataMapper
注:此處僅為個(gè)人的簡(jiǎn)單理解,歡迎指教。
聯(lián)系客服