node.js的 Domain framework JSDM
大家好,我是利奧brighthas,下面介紹一下 node.js 的 CQRS框架[ JSDM ]
參看專案
這裡需要說明的是 domain.bindDB(db) 這裡的db只有一個 get(id,callback) 方法,開發者可以自己實現一個get方法即可, jsdm不是傳統的 CQRS ,去除了傳統的 event store 的回溯的功能。目的是提供中小型專案也能快速開發的目的,並享受CQRS的精華機制。
那麼, db.get 只有這個方法, update 、 remove 、 save呢?
在domain的內部,當 new XXXAggre() 一個根的例項時,會觸發一個 create event, 相應的還有 update / remove 的事件產生,而domain new一個Aggre時,會先存放在 cache 中。只有從Repository 得到 Aggre例項時,會先從cache找,如果沒有會呼叫 db.get 方法並放入 cache然後回撥出來。
remove 、 update 、 save 實現很簡單。
另外如果想實現事件的store,直接 domain.listen(" * " ... ) 監聽 * 號,表示監聽全部事件。
如果專案很複雜,可以使用多個 domain
參看專案
https://github.com/brighthas/jsdm
以前我開發過cqrsnode是純粹CQRS的框架,後來工作室本身需要開發相對複雜的系統,而且要瀏覽器也要有很好的抗“複雜性”,所以我改版成 JSDM。
JSDM不是完全傳統的CQRS DDD框架,以下說明一下。
// 這是虛擬碼,不是完整的,只是說明一下基本用法
var domain = require("jsdm")(); domain .bindAgg(...) .bindCommandHandle(...) .bindService(...) .listen(...) .bindAgg(...) .bindDB(db) .... .seal(); // 封印 // 封印後,只剩下如下三個方法有效。 // on / once 是 監聽器,從domain外部監聽內部,但資料都是隻讀的,改變 domain內部狀態只能透過exec方式執行 command來操作 domain內部。 domain.on(...); domain.once(...); domain.exec(...); // 執行 command ,對應著 command handle. <p class="indent"> |
這裡需要說明的是 domain.bindDB(db) 這裡的db只有一個 get(id,callback) 方法,開發者可以自己實現一個get方法即可, jsdm不是傳統的 CQRS ,去除了傳統的 event store 的回溯的功能。目的是提供中小型專案也能快速開發的目的,並享受CQRS的精華機制。
那麼, db.get 只有這個方法, update 、 remove 、 save呢?
在domain的內部,當 new XXXAggre() 一個根的例項時,會觸發一個 create event, 相應的還有 update / remove 的事件產生,而domain new一個Aggre時,會先存放在 cache 中。只有從Repository 得到 Aggre例項時,會先從cache找,如果沒有會呼叫 db.get 方法並放入 cache然後回撥出來。
remove 、 update 、 save 實現很簡單。
domain .listen("create",function(event){ // 當然實現非常簡單,可以使用記憶體、file 、mysql,一切都可以。 testdb.save(event.aggreType,event.data); }) .listen("update",function(event){ testdb.save(event.aggreType,event.data); }) .listen("remove",function(event){ testdb.remove(event.aggreType,event.data); }) <p class="indent"> |
另外如果想實現事件的store,直接 domain.listen(" * " ... ) 監聽 * 號,表示監聽全部事件。
domain.listen("*",function(event){ // save event object. }) <p class="indent"> |
如果專案很複雜,可以使用多個 domain
var domain1,domain2 ..... , domain n <p class="indent"> |
[該貼被brighthas於2013-02-20 10:52修改過]
相關文章
- Entity Framework Code-First(8):Configure Domain ClassesFrameworkAI
- JSDM框架最新版本介紹JS框架
- 域名(domain)AI
- eminent domainAI
- Node.js 版 CQRS2.0 framework 月底釋出預覽版Node.jsFramework
- 一點疑惑:different from domain model and domain entityAI
- wildfly 21的domain配置AI
- javascreipt cookie的domain和pathJavaCookieAI
- 去掉DB_DOMAIN的方法AI
- document.domainAI
- Change domain timeAI
- Video教程的Domain設計IDEAI
- 包含DOMAIN的資料庫建立資料庫鏈到不包含DOMAIN的資料庫AI資料庫
- Cookie domain 屬性CookieAI
- document.domain用法AI
- 建立weblogic domainWebAI
- 對於domain model的包名的疑惑AI
- wrf模擬的domain圖繪製AI
- 【轉載】去掉DB_DOMAIN的方法AI
- 遷移學習(DIFEX)《Domain-invariant Feature Exploration for Domain Generalization》遷移學習AI
- Unix domain socket 簡介AI
- Grails + EJB Domain ModelsAI
- Programming languages Domain summaryAI
- 在weblogic中一個domain下的應用能呼叫另外一個domain下的應用嗎?WebAI
- 解決 ngrok 的 Domain 錯誤問題AI
- ios,framework的坑iOSFramework
- Android Framework中的Application Framework層介紹AndroidFrameworkAPP
- 《nginx 配置之——domain 轉 path》NginxAI
- pages bookmarks for machine learning domainMacAI
- Error Domain=kAFAssistantErrorDomain Code=7ErrorAI
- 閒侃Domain Logic PatternsAI
- DB_DOMAIN Initialization Parameter (88)AI
- 系統中的User角色和Domain的說法AI
- 請教banq關於domain object的問題AIObject
- .NET Framework 4和.NET Framework 4 Client Profile的區別Frameworkclient
- .NET Framework 的 Quirk VersionFrameworkUI
- 論文解讀(CDCL)《Cross-domain Contrastive Learning for Unsupervised Domain Adaptation》ROSAIASTAPT
- 遷移學習(DCCL)《Domain Confused Contrastive Learning for Unsupervised Domain Adaptation》遷移學習AIASTAPT