領域事件中涉及的實體可能還沒有持久化呀?
Domain event 乍看起來好像解決了一切問題, 用起來也很簡單, 就像Udi Dahan什麼的演示的那樣。
但是現在有一個具體問題,不知道如何解決了:在ctor或者工廠方法中引發事件,由於涉及到的聚合當時還沒有被持久化,handler中就沒法訪問相應的聚合了;甚至,如果是自動生成id的話,那時候id還不存在,連傳遞id也不行。
但是現在有一個具體問題,不知道如何解決了:在ctor或者工廠方法中引發事件,由於涉及到的聚合當時還沒有被持久化,handler中就沒法訪問相應的聚合了;甚至,如果是自動生成id的話,那時候id還不存在,連傳遞id也不行。
一些`hack`思路:
* 手動生成id
* (在app層)使用aop在事務結束的時候統一Dispatch所有在domain中收集到的事件
但是感覺比較猥瑣,不知道各位大神有沒有比較“權威”的做法?(No CQRS & EventSourcing)
class User { private String id //xxoo.... public Message postMessageToUser(String toWhom_id, String what) { def msg = new Message(toWhom_id, what) //Q: 在這裡引發事件,但是此時msg還沒有被持久化 EventBus.instance.fire([msgId: msg.id, what: what, from:this.id] as MessagePostedEvent) } } //============================ class MessagePostedEventHandler { @Inject private UserRepository userRepo @Inject private MessageRepository msgRepo //假定我們需要在handler裡面獲取相關聚合根的詳細資訊(只讀) //Q:不管handler是同步還是非同步,都不能保證相關的實體已經持久化了,就可能無法載入了 public void handle(@Observes @Sync MessagePostedEvent e) { def sender = userRepo.load(e.from) def msg = msgRepo.load(e.id) println "user $sender posted a message: $msg" } } <p class="indent"> |
相關文章
- 領域事件和整合事件沒那麼高大上事件
- 領域驅動模型DDD(二)——領域事件的訂閱/釋出實踐模型事件
- 什麼是Python?Python涉及哪些領域?Python
- 小程式沒有入口?這些“場景”你可能還沒用上
- DDD領域驅動設計:領域事件事件
- 結合領域事件和微服務的實現領域驅動設計 - Alagarsamy事件微服務
- Python主要涉及哪些領域?你都知道嗎?Python
- 事件風暴 - 分解問題領域的最佳實踐事件
- 領域驅動設計戰術模式--領域事件模式事件
- 戲說領域驅動設計(廿五)——領域事件事件
- 使用Spring Data JPA在更改實體時釋出DDD領域事件 - thorbenSpring事件ORB
- 使用Datomic實現沒有麻煩的事件溯源事件
- DDD:不要洩露領域事件事件
- 雷軍稱,小米已經建立起了涉及 12 大領域、98 項細分領域
- 事件風暴與領域故事的比較事件
- 領域事件命名的壞氣味 - Tomasz Jaskuela事件
- Hibernate註解(一)之持久化實體持久化
- 設計Akka.NET領域事件和命令的最佳實踐 | Petabridge事件
- 程式化廣告還有未來麼?(4/5)——程式化領域變化的底層邏輯和反思
- Abp領域事件(EventBus)原始碼解析事件原始碼
- Java反應式事件溯源:領域Java事件
- 軟體領域的流氓公司是中國的360軟體
- 有沒有大佬知道這種資料應該怎麼抓取呀?
- Dcat文件中沒有體現的用法
- 整個領域沒了!學術界有史以來最大的醜聞
- Blazor Hybrid 實戰體驗:那些你可能沒預料到的坑沒預料到的坑Blazor
- 重新整理 .net core 實踐篇—————領域事件[二十九]事件
- 靜態成員函式-this指標沒有指的是沒有給,而不是不能擁有,可以自己給呀函式指標
- 楊建允:沒有公域做不大,沒有私域做不穩
- 有沒有面過西安騰訊雲的小夥伴分享一下經驗呀。
- 在K8S中,資料持久化的方式有哪些?K8S持久化
- 沒有記憶體,怎麼還能跑程式呢記憶體
- laravel 定義模型的區域性查詢作用域方法沒有PhpStorm沒有程式碼提示Laravel模型PHPORM
- 戲說領域驅動設計(十七)——實體實戰
- 《深淵領域》:創新 Roguelike 能否帶來體驗的進化?
- 你說一下Redis為什麼快吧,怎麼實現高可用,還有持久化怎麼做的?Redis持久化
- 領域驅動設計(DDD)實踐之路(二):事件驅動與CQRS事件
- 在 appium 自動化測試中,有沒有可以實現螢幕錄製的方法?APP
- 電腦科學領域實現男女平等 還要100年