DDD專案現在實施的問題
使用傳統JavaEE或Spring + Hibernate這樣的框架,是無法實現DDD原始意圖的,這個DDD創始人Eric Vans已經說過:2012年Eric Evans關於技術如何影響DDD的會話
要實現DDD原始意圖,必須CQRS+Event Sourcing。
提供基於Jdonframework實現的CQRS 原始碼:
為幫助大家更好理解本PPT,用Jdonframework將Match原始碼完整寫成可執行的專案:
Match完整原始碼按這裡
也可以透過打包下載:example.rar
內中含有DCI+CQRS和CQRS+EventSourcing兩種案例。
其他案例:
(1)選用新的程式語言Scala,文章:Scala的event-sourced和CQRS案例程式碼
(2)Axon的Axon-trader案例
有人說,我一定要用Spring來實現,那麼會導致什麼後果呢?
因為Spring不支援Domain Event,只能將外部介面直接注入到領域模型,很多介面會汙染領域模型,最後領域模型還是被外幣介面或架構綁架了,這時被綁架的領域模型就成了扁平的“資料”,而不是活生生的“語言”。
這嚴重違背DDD中聚合根是語言核心,程式設計程式碼必須反映統一語言,這個反覆重申的要旨,難道我們重申這個只是理論喊口號嗎?如果它不如此具有顛覆性,我們反覆強調它幹嗎?如果不是因為現在所謂經典做法完全違反這種要旨,我們苦口婆心地說它幹嗎呢?
當然,該PPT也去除了Hibernate等ORM註解,因為它也嚴重綁架干擾了領域模型,干擾領域模型如實成為統一語言。
所以,儘管Jdon兩年前就在討論DDD CQRS ES,並且也推出這樣的開源框架,這些都是一種探索,是不是代表未來不能確定,但是如果這是未來,我相信這是JavaEE或Spring必須跟上的,但是Java C語言本身帶來的限制,還是不如新語言Scala等要優雅。儘管jdonframework使用Disruptor實現了領域事件,也是透過領域模型的注入實現,雖沒有Scala的Actor那麼直接,但是效能和簡潔不亞於Actor。
如果各位有意在自己專案中實施DDD,而且不改用框架,那麼出來的效果會很差,還不如還是使用本文開始批評的貧血模型,把業務方法都放入Service中。這種號稱SOA架構也就是面向服務的架構很容易將服務做出程式導向的大函式,擴充維護性都很差。
如果你對JavaEE認識或物件導向設計OO不夠Strong,那麼也請不要選擇DDD,你遇到的概念和思路轉變不是象學習一門語言那麼簡單,專案有風險,實施需謹慎。
[該貼被banq於2012-12-19 13:45修改過]
相關文章
- 實施DDD的幽默:DDD落地需要專門的框架嗎?框架
- 專案實施方案
- 專案出現的問題記錄
- 實際專案中遇到的問題
- 專案實施過程
- 專案實戰小問題:
- SSM專案出現的依賴問題SSM
- 專案中常問的問題
- 管理專案風險:考慮你的專案可能出現的問題
- 在專案實踐中用更優雅的方式處理陣列問題陣列
- 專案問題
- 企業如何實施專案控制?
- 貪食蛇專案開發出現的問題。
- Flowable與springBoot專案整合及出現的問題Spring Boot
- 電商企業在實施ERP專案時的應對策略有哪些?
- RPA專案的實施週期一般是多久?企業如何來估算RPA專案的實施週期?
- COLA 4.x和DDD專案實踐精粹
- Axon框架快速入門和DDD專案實踐框架
- Java專案問題Java
- 企業在實施採購管理時需要注意哪些問題?
- 在專案管理中,什麼是可實現的?專案管理
- 實現Vue專案主題切換Vue
- 微前端與專案實施方案研究前端
- CRM系統實施中的問題有哪些?
- Martyr2專案實現——Number部分的問題求解 (1) Find Pi to Nth DigitGit
- 如何實現在react現有專案中嵌入Blazor?ReactBlazor
- vue專案建立遇到的問題Vue
- 專案實戰之gradle在實際專案中的使用Gradle
- 專案實施中如何進行有效的溝通?
- ERP專案成功實施的三大關鍵要素
- 阿里DDD專案最佳實踐-COLA 架構總覽阿里架構
- 【專案中遇到的zookeeper的問題】
- 如何解決精益生產專案中出現的問題?
- 如何糾正六西格瑪專案中出現的問題?
- 工程專案成本管理容易出現的四個問題
- 軟體測試實戰專案,問題答疑
- CRM系統實施中的一些問題?
- 敏捷專案管理到底怎麼實施?敏捷專案管理
- SpringBoot專案在IntelliJ IDEA中實現熱部署Spring BootIntelliJIdea熱部署