All Projects → thenativeweb → node-evented-command

thenativeweb / node-evented-command

Licence: MIT license
provides simple command/event handling for evented systems like cqrs

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to node-evented-command

Xer.cqrs
A lightweight and easy-to-use CQRS + DDD library
Stars: ✭ 96 (+540%)
Mutual labels:  cqrs, command, event
vscode-powertools
A swiss army knife with lots of tools, extensions and (scriptable) enhancements for Visual Studio Code.
Stars: ✭ 44 (+193.33%)
Mutual labels:  command, event
Ease
It's magic.
Stars: ✭ 1,213 (+7986.67%)
Mutual labels:  observer, event
eventsourcing-go
Event Sourcing + CQRS using Golang Tutorial
Stars: ✭ 75 (+400%)
Mutual labels:  cqrs, event
Event
The Hoa\Event library
Stars: ✭ 319 (+2026.67%)
Mutual labels:  observer, event
EventEmitter
Simple EventEmitter with multiple listeners
Stars: ✭ 19 (+26.67%)
Mutual labels:  observer, event
sqrs
🚌SQRS is a JavaScript library for implementing CQRS pattern.
Stars: ✭ 23 (+53.33%)
Mutual labels:  cqrs, command
Resize Observer
Polyfills the ResizeObserver API.
Stars: ✭ 540 (+3500%)
Mutual labels:  observer, event
Pydesignpattern
Design Pattern that described by Python, This is the source code for the book of Everybody Know Design Patterns.
Stars: ✭ 174 (+1060%)
Mutual labels:  observer, command
laravel-broadcast-demo
Article: Laravel PWA to implement Broadcasting
Stars: ✭ 17 (+13.33%)
Mutual labels:  event
evon
Fast and versatile event dispatcher code generator for Golang
Stars: ✭ 15 (+0%)
Mutual labels:  event
nest-microservices
Small user management system using nest microservices
Stars: ✭ 35 (+133.33%)
Mutual labels:  cqrs
z-pot
project overview tool, used to analyze the amount of code, the number of files, code statistics and so on.
Stars: ✭ 18 (+20%)
Mutual labels:  command
HorizontalTimesLayout
Layout to display time slots in horizontal 24 hour format
Stars: ✭ 31 (+106.67%)
Mutual labels:  event
laravel-admin
LaravelAdmin是基于PHP开发的基础管理后台系统,做到开箱即用,为新项目开发省去了基础功能开发的步骤;此系统采用前后端分离模式,后端使用Laravel,前端使用vue;主要包含:登录、注销、可视化数据大屏、管理员、角色管理、菜单管理、权限管理、错误日志、登录日志、访问日志、获取服务器CPU使用率、内存使用率等功能。后端主要使用Artisan命令行、Jobs消息队列、 Rules验证规则、Restful API、Composer扩展包、Redis秒杀、Extend自定义扩展类:微信授权、钉钉告警推送、MongoDB、阿里云OSS、七牛云存储、七牛云直播、php-jwt TOKEN、Phpoffice、MySql数据库字典、Elasticsearch等技术。
Stars: ✭ 45 (+200%)
Mutual labels:  command
Unity-EventBinder
User Interface Event decoupler
Stars: ✭ 27 (+80%)
Mutual labels:  event
microservice workshop
Microservices Architecture Workshop focuses on helping the developers / architects to understand the key Architecture paradigms with hands on section. The course helps the developers from Monolithic App mindset to a Microservices based App development. It also helps the developers with hands on development experience with key Microservices infra…
Stars: ✭ 69 (+360%)
Mutual labels:  cqrs
oh-my-design-patterns
🎨 Record the articles and code I wrote while learning design patterns
Stars: ✭ 33 (+120%)
Mutual labels:  observer
mobx-router5
Router5 integration with mobx
Stars: ✭ 22 (+46.67%)
Mutual labels:  observer
Totem
Knowledge work at play
Stars: ✭ 56 (+273.33%)
Mutual labels:  cqrs

⚠️ IMPORTANT NEWS! 📰

I’ve been dealing with CQRS, event-sourcing and DDD long enough now that I don’t need working with it anymore unfortunately, so at least for now this my formal farewell!

I want to thank everyone who has contributed in one way or another. Especially...

  • Jan, who introduced me to this topic.
  • Dimitar, one of the last bigger contributors and maintainer.
  • My last employer, who gave me the possibility to use all these CQRS modules in a big Cloud-System.
  • My family and friends, who very often came up short.

Finally, I would like to thank Golo Roden, who was there very early at the beginning of my CQRS/ES/DDD journey and is now here again to take over these modules.

Golo Roden is the founder, CTO and managing director of the native web, a company specializing in native web technologies. Among other things, he also teaches CQRS/ES/DDD etc. and based on his vast knowledge, he brought wolkenkit to life. wolkenkit is a CQRS and event-sourcing framework based on Node.js. It empowers you to build and run scalable distributed web and cloud services that process and store streams of domain events.

With this step, I can focus more on i18next, locize and localistars. I'm happy about that. 😊

So, there is no end, but the start of a new phase for my CQRS modules 😉

I wish you all good luck on your journey.

Who knows, maybe we'll meet again in a github issue or PR at i18next 😉

Adriano Raiano


Introduction

travis npm

Project goal is to provide a simple command/event handling for evented systems like cqrs.

Installation

npm install evented-command

Usage

var evtCmd = require('evented-command')();

Define the command structure [optional]

The values describes the path to that property in the command message.

evtCmd.defineCommand({
  id: 'id',                       // optional
  name: 'name',                   // optional
  context: 'context.name',        // optional
  aggregate: 'aggregate.name',    // optional
  aggregateId: 'aggregate.id'     // optional
});

Define the event structure [optional]

The values describes the path to that property in the event message.

evtCmd.defineEvent({
  correlationId: 'correlationId', // optional
  id: 'id',                       // optional
  name: 'name',                   // optional
  context: 'context.name',        // optional
  aggregate: 'aggregate.name',    // optional
  aggregateId: 'aggregate.id'     // optional
});

Define the id generator function [optional]

you can define a synchronous function

evtCmd.idGenerator(function() {
  var id = require('uuid').v4().toString();
  return id;
});

or you can define an asynchronous function

evtCmd.idGenerator(function(callback) {
  setTimeout(function() {
    var id = require('uuid').v4().toString();
    callback(null, id);
  }, 50);
});

Wire up commands and events

// pass in events from your bus
bus.on('event', function(data){
  evtCmd.emit('event', data);
});

// pass commands to bus
evtCmd.on('command', function(data) {
  bus.emit('command', data);
});

Send commands

var cmd = new Command({
  // id: 'my onwn command id', // if you don't pass an id it will generate one, when emitting the command...
  name: 'changePerson',
  payload: {
    name: 'my name'
  },
  aggregate: {
    id: 8,
    name: 'jack'
  },
  context: {
    name: 'hr'
  }
});

// emit it
cmd.emit();



// if you want to observe the command pass a callback
cmd.emit(function(evt) {

});


// if you want to observe the command that generates any events pass an object like this:
cmd.emit({

  event1: function(evt) {

  },

  event2: function(evt) {

  }

});

Send commands with the speakable api

evtCmd.send('changePerson')
      .for('person') // aggregate name
      .instance('8') // aggregate id
      .in('hr')			 // context name
      .with({
        // id: 'my onwn command id', // if you don't pass an id it will generate one, when emitting the command...
        revision: '12',
        payload: {
        	name: 'jack'
        }
      })
      .go(function(evt) {
        console.log('speakable', evt);
      });

evtCmd.send('multi')
      .for('aggregate')
      .instance('instanceId')
      .in('context')
      .with({
        revision: '43',
        payload: 'data2'
      })
      .go({
        event1: function(evt) {
          console.log('speakable', evt);
        },
        event2: function(evt) {
          console.log('speakable', evt);
        }
      });

License

Copyright (c) 2016 Adriano Raiano

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].