使用qi4j實現DCI架構


忘記Scala,Qi4J是下一個 Java? - Thinking In Jdon http://www.jdon.com/37099
Business Rules matters more很多聰明的程序員總是認為架構中底層的框架比簡單的領域模型更加重要,比如OSGI可能就是一個比較底層的框架,很多人熱捧它,但是它如果脫離簡化領域模型就沒有意義,領域模型是反映需求業(yè)務,是能夠收到客戶的鈔票的,底層設施只是為這種目的實現的工具,別本末倒置了。如果我們更多程序員關注業(yè)務邏輯和領域模型,而不是關心事務 安全或框架的特點,軟件生產力將得到真正加強。Evans DDD一書寫得很好,但是真正實現起來比較困難,因為缺乏一個語法環(huán)境,而Qi4j正是提供這樣一個語法環(huán)境,什么時候DDD起飛了,也是Qi4j起飛之日。If DDD takes off, Qi4J or frameworks like Qi4J will take off too.

類已經死亡,接口萬歲Qi4j不只是一個框架,其實為我們指出現實中OO的誤區(qū)。我曾經重構一個大型的BOSS,該BOSS使用Hibernate,屏蔽了數據庫影響,基本都是使用面向對象設計,但是由于大量使用繼承,導致耦合粒度太粗,結構混亂,這是OO之錯?還是誤用OO之錯呢?
所以,在現實中,特別是領域建模時,使用繼承會非常容易,可以說是直覺,但是使用接口才是設計,接口粒度要更細,至少有將行為和抽象分離的用處。如果框架提供這種行為和抽象的分離約束就非常好,但是又會導致貧血模型,所以,現實中設計就是在博弈:最大限度用接口,然后將接口嵌入模型中(這個模型就是Qi4j所說的組合模型了,因為它是拆了組合得出來的,就象1+1=2的組合結果2一樣)。


使用qi4j實現DCI架構 - Thinking In Jdon http://www.jdon.com/38266

最后,該文總結了這樣做的優(yōu)點:以上代碼可能多了些,但是能夠完成代碼的可讀性, 代碼的可維護性, 易于改變拓展性,如果你使用普通POJO方法,把所有職責放在一個類中,好像很簡單了,一旦這個軟件項目發(fā)展到一定程度,就難以拓展維護。此外還有優(yōu)點是可以重用復用,能夠避免貧血模型,在目前所謂主流架構Spring或EJB之中,你為了避免將所有行為方法放入一個大類中,將數據放在實體中,將行為分開放到服務Service中(見請問一下這樣分層對不對),這實際破壞了封裝,就是MF指責的失血模型,問題擺在那里,但是一直沒有得到解決, DCI架構解決了這個問題。


Qi4j提出面向組合編程思想 - 51CTO.COM http://developer.51cto.com/art/200711/60715.htm


DCI架構是什么? - Thinking In Jdon http://www.jdon.com/37976
DCI可以使用Scala的traits方便實現,Java中可以使用AOP中的Mixin來實現,也是一種面向組合編程,這點DDD領域驅動框架Qi4j做得比較好。忘記Scala,Qi4J是下一個 Java?


Apache Zest http://zest.apache.org/

GitHub - apache/zest-java: Mirror of Apache Zest java https://github.com/apache/zest-java


--EOF--

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容