UNPKG

@foblex/ng-mediator

Version:

A mediator library for Angular facilitating a clean architecture with a better command-query separation.

75 lines (57 loc) 2.18 kB
# ngMediator Library ngMediator is a mediator library for Angular that facilitates a clean architecture with a better command-query separation. It helps in orchestrating the handling of commands and queries in a simple, extendable, and maintainable manner. ## Installation Install the ngMediator library via npm: ```bash npm install @foblex/ng-mediator ``` ## Usage ngMediator simplifies the handling of commands and queries within your Angular applications, ensuring a clean and maintainable architecture. Below are the steps on how to utilize ngMediator in your project: 1. **Define Requests, Validators, and Handlers**: Define your requests, validators, and handlers using the provided decorators and interfaces from the ngMediator library. Example: ```typescript import { IRequest, FValidatorBase, FCommandBase, FQueryBase } from '@foblex/ng-mediator'; // Define your Request class MyRequest implements IRequest<MyResponse> { } // Define your Response class MyResponse { // fields... } // Define your Validator @Injectable() class MyValidator extends FValidatorBase<MyRequest, MyResponse> { validate(request: MyRequest): Observable<Error[]> { // validation logic... } } // Define your Handler @Injectable() class MyHandler extends FCommandBase<MyRequest, MyResponse> { handle(request: MyRequest): Observable<MyResponse> { // handling logic... } } // or @Injectable() class MyHandler extends FQueryBase<MyRequest, MyResponse> { handle(request: MyRequest): Observable<MyResponse> { // handling logic... } } @NgModule({ imports: [ FMediatorModule.forFeature(MyRequest, MyValidator, MyHandler), ] }) export class Module { } ``` 2. **Send Requests**: Utilize the FMediator service to send your requests. The service will ensure that your requests are validated and handled by the appropriate handlers. Example: ```typescript import { FMediator } from '@foblex/ng-mediator'; fMediator.send(new MyRequest()).subscribe(response => { console.log(response); }); ```