pip-services3-commons-node
Version:
Portable abstractions and patterns for Pip.Services in Node.js
43 lines • 2.91 kB
text/typescript
/**
* @module commands
*
* Todo: Rewrite this description.
*
* @preferred
* Contains implementation of Command design patterns, which can be used to implement various remote procedure calls (RPCs).
* RPCs replace unique calls with universal "message transfer" calls, in which the message itself contains the called method's
* signature, as well as the parameters to pass for execution.
*
* When designing calls of methods/commands using the Command design pattern, uniform interfaces can be used, which, in turn,
* allow any amount of concrete methods to be called.
*
* Command design patterns can be used for intercepting messages and for various logging implementations.
*
* These design patterns allow us to create [[ICommandable Commandable Interfaces]], which are completely universal. If an object
* extends [[ICommandable]] and returns a [[CommandSet]], then we can implement, with minimal code, a commandable client for this
* object, using various technologies.
*
* - [[ICommandable Commandable Interfaces]] – part of the command design pattern, used to make classes with certain logic, which
* are capable of receiving and processing commands in this universal form.
*
* - [[ICommandInterceptor Command interceptors]] – modify the message execution pipeline. Command interceptors are used to intercept
* calls, perform a set of actions, and, optionally, cancel the command's actual execution by simply returning a result. This logic
* is used in aspect-oriented programming. Aspect-oriented programming contains perpendicular logic (aspects, for example: logging,
* caching, blocking), which can be removed from the business logic and added to these perpendicular calls. When using interceptors,
* a command can pass through an execution chain, consisting of interceptors, which can:
* - simply make some note of the command, notify, log, get metrics, or do some other passive task; or
* - intercept the command completely and, for example, return a previous record of the call from the cache. A command’s return
* value can also be intercepted in a similar manner: the result can be written to cache, so that the next call doesn’t have to be made.
*
* - [[InterceptedCommand Intercepted commands]] are used as pattern decorators in the command design pattern. They are represented as regular
* commands, but run their own logic before calling the actual command.
*/
export { ICommand } from './ICommand';
export { ICommandInterceptor } from './ICommandInterceptor';
export { IEvent } from './IEvent';
export { IEventListener } from './IEventListener';
export { Command } from './Command';
export { CommandSet } from './CommandSet';
export { Event } from './Event';
export { InterceptedCommand } from './InterceptedCommand';
export { ICommandable } from './ICommandable';