Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jorge07/hollywood
Hollywood-js is a Framework for building very modular and high scalable server side applications following CQRS (Command Query Responsibility Segregation) and enforcing IoC.
https://github.com/jorge07/hollywood
ddd event-sourcing typescript
Last synced: about 2 months ago
JSON representation
Hollywood-js is a Framework for building very modular and high scalable server side applications following CQRS (Command Query Responsibility Segregation) and enforcing IoC.
- Host: GitHub
- URL: https://github.com/jorge07/hollywood
- Owner: jorge07
- Created: 2018-02-15T02:16:12.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2023-07-18T20:13:25.000Z (over 1 year ago)
- Last Synced: 2024-10-30T02:36:54.487Z (2 months ago)
- Topics: ddd, event-sourcing, typescript
- Language: TypeScript
- Homepage: https://jorge07.github.io/hollywood/
- Size: 1.4 MB
- Stars: 24
- Watchers: 4
- Forks: 6
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# Hollywood
[](https://famfonts.com/wp-content/uploads/hollywood-wide.png)
[![Build Status](https://travis-ci.org/jorge07/hollywood.svg?branch=master)](https://travis-ci.org/jorge07/hollywood) [![Coverage Status](https://coveralls.io/repos/github/jorge07/hollywood/badge.svg?branch=master)](https://coveralls.io/github/jorge07/hollywood?branch=master)
[![NPM Version](http://img.shields.io/npm/v/hollywood-js.svg?style=flat)](https://www.npmjs.org/package/hollywood-js)
[![NPM Downloads](https://img.shields.io/npm/dm/hollywood-js.svg?style=flat)](https://npmcharts.com/compare/hollywood-js?minimal=true)
[![Install Size](https://packagephobia.now.sh/badge?p=hollywood-js)](https://packagephobia.now.sh/result?p=hollywood-js)
[![semantic-release: angular](https://img.shields.io/badge/semantic--release-angular-e10079?logo=semantic-release)](https://github.com/semantic-release/semantic-release)Hollywood-js is a Framework for building very modular and high scalable server side applications following CQRS (Command Query Responsibility Segregation) and enforcing IoC.
It provides a Bounded Context oriented architecture, enforcing isolation and event driven communication between them.
Hollywood-js it's strongly CQRS structured, allowing you to define or not a DDD / Clean Architecture project.Includes advanced Event Sourcing capabilities like Event Store abstractions, Event Store Snapshots, Projections and Event Bus (Listeners and Subscribers).
## Documentation
Documentation about Hollywood, DDD and EventSourcing available [here] (https://jorge07.github.io/hollywood/)
> Documentation still a wip## Installation
NPM:
`npm install hollywood-js`
Yarn:
`yarn add hollywood-js`
### CQRS Framework with Event Sourcing support.
Features:
- Dependency Injection (Built around Inversify).
- Module hierarchy for Bounded Context isolation.
- DDD toolbox
- Event Driven
- Support for different event streams
- In Memory implementations for testing
- AggregateRoot and EventSourced abstractions
- Event Store
- Event Store decoupled from storage implementation thanks to DBAL (Database Abstraction Layer)
- **In Memory** Event Store DBAL implementations for testing
- Configurable **SnapshotStore** support.
- In Memory Snapshot DBAL implementation for testing
- Built in Event Bus
- Command and Query Bus
- Command and Query handlers autowiring
- **Middlewares support** for Command and Query bus
- Libraries should NOT log, I don't log, I throw Errors.
- Not a server framework but tested with express and fastify (this last one the one I recommend, see /examples).### Basic Usage
```typescript
import ModuleContext from "./ModuleContext";
import Kernel from "./Kernel";
import {inject} from "inversify";const parameters = new Map([
['hello.style', 'hey']
]);class Hey {
constructor(@inject('hello.style') private readonly style: string) {}hello(): string {
return this.style
}
}const MainModule = new ModuleContext({
services: [
['hey', {instance: Hey}]
]
})const kernel = new Kernel('dev', true, parameters, MainModule);
kernel.container.get('key').hello() // 'key'
```### Module dependencies
```typescript
import ModuleContext from "./ModuleContext";
import Kernel from "./Kernel";
import {inject} from "inversify";const parameters = new Map([
['hello.style', 'hey']
]);class Hey {
constructor(@inject('hello.style') private readonly style: string) {}hello(): string {
return this.style
}
}const HeyModule = new ModuleContext({
services: [
['hey', {instance: Hey}]
]
})class Person {
constructor(@inject('hey') private readonly hey: Hey) {}sayHello(): string {
return this.key.hello()
}
}const PersonModule = new ModuleContext({
services: [
['person', {instance: Person}]
],
modules: [HeyModule]
})
const kernel = new Kernel('dev', true, parameters, MainModule);kernel.container.get('person').sayHello() // 'key'
```