2016-12-23 79 views
1

我正在將應用程序從c#移動到node.js。我一直在學習node.js,所以我是一個node.js新手。我正在閱讀「域驅動設計的模式,原則和實踐」一書,並發現了我目前的項目可以從中受益的大量信息。使用域驅動設計的node.js

例如,在本書中,有一個示例電子商務應用程序,其中包含三個有界的上下文:銷售,運輸和計費。每個有界上下文都負責其自己的數據庫,每個有界上下文都運行在NServiceBus的一個實例中。這似乎是一個很好的方法,因爲一切都在相同的解決方案下運行,但不同的項目。在將其轉換爲node.js時,我遇到了一些困惑。

1)我有一個艱難的時間找到很好的例子,像上面的電子商務例子那樣將node.js與ddd合併在一起?這裏的一些障礙是如何處理OOP的差異。 2)如果在書籍示例代碼中,每個有界的上下文都在它自己的項目中並且在NServiceBus中運行,這是否意味着在將它轉換爲node.js時,我使用vscode作爲GUI,我需要爲每個項目創建一個單獨的父文件夾(有界的上下文),併爲每個有界的上下文提供一個不同的端口來監聽我是否想讓所有有界的上下文在同一臺服務器上運行,直到我需要相應地縮放?

3)NServiceBus允許消息和事件傳回。對於node.js,存在哪種服務總線技術,最好是開源的,並且可以在基於Linux的機器上運行,這將提供NServiceBus提供並可靠的功能類型?我是否應該僅僅使用rabbitmq來提供這種功能,包括髮送事件?

+0

我在NodeJS中實現了一個真正的個人項目,因爲我想學習並且經歷了一種實用的方式。我使用Mongoose靜態和實例方法來驅動我的域。儘管您將自己的業務邏輯嚴格限制到Mongoose,它仍然可以達到目的。 –

+0

我建議每個有界的上下文都是它自己的git倉庫中的一個微服務,並且將自己的部署過程作爲雲中的獨立實例。我會去抽象像aws elasticbeanstalk或docker容器那樣的東西。他們都可以通過異步消息總線或同步http調用進行通信 – danfromisrael

+0

@danfromisrael這就是我所想的,只要每個有界上下文(microservice)都在它自己的項目文件夾中。現在,如果我運行express api作爲允許客戶端通過rest api訪問微服務的接口,那麼如果我正在使用elasticbeanstalk或docker,microservice是否仍會在具有指定端口的node.js服務器中運行,或者它們會替換node.js服務器設置的服務器方面?我是否應該考慮AWS Lambda以及它似乎是事件驅動的?我知道我需要考慮命令和事件的服務總線場景。 – user1790300

回答

1

我建議通過標記與DDD故宮模塊會:

並標有服務總線:

有一個另外還有Philipp Fehre的書JavaScript Domain-Driven Design

+0

我有JavaScript域驅動設計書。我已經通過了一些示例代碼(他們設計了一個基於地下城的遊戲)。完成模式,原理等書後,計劃完整閱讀。它沒有像我在「領域驅動設計的模式,原則和實踐」一書中找到的那樣詳細,這本書非常詳細,近750頁。問題是,我想找到一些提供類似node.js細節的例子來清除我在翻譯中遇到的一些混淆。 – user1790300

2

您可能對wolkenkit感興趣,它是Node.js和JavaScript的CQRS和事件源框架,與域驅動設計(DDD)一起發揮得非常好。

除了實際的框架(它們被部署爲NPM模塊wolkenkit),還有一些可用的示例應用程序,顯示是如何工作的:

除了一個應用程序,並有再次尤其是在這解釋了DDD,事件採購和CQRS,他們是什麼brochure you can download ,他們如何相互關聯,等等...

PS:請注意,我是wolkenkit的作者之一,所以請帶上我的答案與一粒鹽。