Saturday, December 09, 2006
Something about Domain Model
以目前我論文中工作流程系統開發的狀況來說
就是卡在domain model的design與persistence
design方面靠的是經驗
persistence方面靠的是技術
我也覺得這是整個系統中最重要的一部份
對於workflow management system或是BPM方面的理論我並不是很熟
參考的也只有一些paper、spec、還有一本O'Reilly的書叫Essential Business Process Modeling
但是要能讓系統快點動起來我是選擇以最少的資料先下去實作
至於技術方面我看的比較多
這幾天都在K那本新出來的Java Persistence with Hibernate
目標是讓所有domain model都使用generic dao來進行存取
最早是從這篇Don't repeat the DAO!中的範例弄到我系統裡
這篇文章中使用generic、Hibernate、Spring AOP來實作
也是目前我系統中所用的方式
其實這樣子也就算不錯了
我只要把mapping file寫好就可以進行系統其他部分的實作
之前有想用AspectJ去替換掉Spring AOP
但是到現在還沒辦法弄出來 :(
而Christian Bauer也有在CaveatEmptor example中提供了兩種generic dao的實作
一種是native Hibernate,也就是一個POJO加上一個XML mapping file,配上generic dao
一種是JPA,一個annotated POJO,配上generic dao
相關文章有下列兩篇
另外後來在這篇Spring 2.0 vs. the Anemic Domain Model裡面
看到Spring 2.0中對AspectJ的整合竟然是如此漂亮
你可以在service object中inject dao
現在也能在domain object於runtime實體化的同時inject dao進去
造成了一種比較OO的persistence方式
有多大的好處對我來說好像不是很明顯
不過這是一個Spring 2.0與AspectJ整合後不錯的應用例子
希望對系統中其他部份會有點啟發
以上總結就是我想把系統中的domain model弄成像是Don't repeat the DAO!那篇文章中的那樣
不過改成用Hibernate annotation再搭配Spring 2.0的AspectJ整合
希望我只要寫出一個annotated POJO
裡面可以有一些finder method
與一個屬於該POJO的dao interface
就可以透過generic dao framework自動產生出dao implementation出來放到Spring IoC container中成為一個bean
或是直接inject到需要用到那個dao的domain object或service object中
變成相當clean的一組domain model
但是我目前的進度跟這個目標比起來好像差蠻多的
要弄多久我自己都不知道...
還是說已經有人有寫出來類似的東西可以直接讓我拿來用 :P
不過最近的進度感覺是相當緩慢
希望先能動就好吧!