Code Monkey home page Code Monkey logo

angular-eda-example's Introduction

Cobiro Event Driven Architectures ( EDA )

This repository contains many examples of usage EDA (@cobiro/eda) with Angular and NGRX.

How to use

Install package

npm install @cobiro/eda

Add ApplicationBusModule to your module

import {ApplicationBusModule} from "@cobiro/eda";

@NgModule({ 
  declarations: [AppComponent],
  imports: [
    BrowserModule,
    BrowserAnimationsModule,
    ApplicationBusModule.forRoot(),
    StoreModule.forRoot({}),
    EffectsModule.forRoot(),
    AppRoutingModule,
    StandardModule,
    NgrxModule
  ],
 providers: [],
 bootstrap: [AppComponent]
})
export class AppModule {}

Create ApplicationEvent

import {ApplicationEvent} from "@cobiro/eda";

export class ProductAddedEvent extends ApplicationEvent {
  constructor(public readonly name: string, public readonly price: number, public readonly currency: string) {
    super();
  }
}

Dispatch event in your application

import {APPLICATION_BUS, Dispatcher} from "@cobiro/eda";
import {ProductAddedEvent} from "./product-added.event";
import {Product} from "./products.service";

export class ProductsComponent {
  constructor(
    @Inject(APPLICATION_BUS) private _applicationBus: Dispatcher<ProductAddedEvent>
  ) {
  }

  onProductAddClicked(product: Product): void {
      this._applicationBus.dispatch(new ProductAddedEvent(product.name, product.price, product.currency));
  }
}

Create ApplicationEventHandler and provide it into your module when you want to handle it:

import {NotificationsService} from "../notifications.service";
import {ProductAddedEvent} from "../../../../events/src/lib/product-added.event";
import {ApplicationEventHandler} from "@cobiro/eda";

@Injectable()
export class ProductAddedEventsHandler implements ApplicationEventsHandler {
  eventsClasses = [ProductAddedEvent];
  strategy = ongoingEventsOrchestrationStrategy;

  constructor(private readonly layoutState: LayoutState) {}

  handle(events: ProductAddedEvent[]) {
    const event = events[0];
    this.notifyService.notify(`Added ${event.name} ${event.currency}${event.price}`);
  }
}

@NgModule({
  ...,
  providers: [
    provideApplicationEventsHandler(ProductAddedEventHandler)
  ]
})
export class NotificationsModule { }

Strategies

In events handler you can use different various of strategy to orchestrate events.

  • ongoingEventsOrchestrationStrategy - it's default strategy will orchestrate events one by one
  • allEventsOnceOrchestrationStrategy - orchestrate all the events at the same time
  • zipEventsOrchestrationStrategy - after all events are dispatched
  • limitedOngoingEventsOrchestrationStrategy - can handle two events when first event is starting event and second is canceling event, when the canceling event is dispatched handler stops listening to events

angular-eda-example's People

Contributors

ortho23 avatar kmichalski2 avatar gradzio avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.