Giter Site home page Giter Site logo

nangal / aggregates.net Goto Github PK

View Code? Open in Web Editor NEW

This project forked from charlessolar/aggregates.net

0.0 2.0 0.0 15.49 MB

.NET event sourced domain driven design model via NServiceBus and GetEventStore

License: MIT License

C# 98.69% PowerShell 0.88% Shell 0.42%

aggregates.net's Introduction

Build Build status
Coverage Coveralls Coverage Status SonarCloud SonarCloud
Quality SonarCloud GitHub issues
Nuget Nuget

Aggregates.NET

Aggregates.NET is a framework to help developers integrate the excellent NServiceBus and EventStore libraries together.

This library contains code to help create and manage domain driven design objects such as Aggregates, Entities, Value Objects, etc. This framework is by far not the only option, other libraries include:

This project was originally inspired by and still uses many ideas from NES and CommonDomain.

What will Aggregates.NET do for you?

We fill in the gap between EventStore and NServiceBus. Commands from NServiceBus are applied to aggregate objects via message handlers and events generated via the aggregates are saved to the event stream and published to the bus.

Current features include -

  • Entities (Aggregates)
  • Children entities of entities (infinite parenthood)
  • Snapshotting
  • Query pattern
  • Unit of Work and Repository pattern
  • Automatic saving and publishing of domain events
  • Out of band events (events saved or published which do not affect business logic of entity)
  • Bulk command and event delivery
  • Intelligent and configurable conflict resolution
  • Automatic configuration of projections and competing consumers for consumers
  • EventStore sharding
  • Automatic command accept/reject replies
  • Ton of performance counters

Performance

Aggregates.NET is not slow - but I did not write it focused on bleeding fast performance. "Premature optimization is bad" etc etc. Aggregates.NET is however designed with features meant to allow you to perform well. A great example is the support for bulk command and event processing. When setup you can have your app process say 1000 messages of a specific type at once instead of one at a time. The advantage being that you can cache objects while processing saving a vast amount of read time from your database.
These features of course have trade offs and should only be used in specialized circumstances but when your app is tuned correctly you'll definitely see greater throughput than a traditional read, hydrate, write, repeat paradigm.

Currently Aggregates.NET offers the following performance features:

  • Snapshotting
  • Bulk message (commands and events) delivery
  • Special "weak" conflict resolver which delays stream conflict resolution preventing conflict hell
  • Smart snapshot store
  • Out of band events
  • Async throughout

Status

Aggregates.NET is still under development but I personally am using it in 2 projects so its very usable. Expect fairly often updates via Nuget as I tend to add and fix things when the issue pops up. Sometimes the packages have a bug or some small issue but I always fix it right away. I do not have any plans yet for 'stable' releases so only use the library is you are comfortable with beta builds.

I have no plans to freeze the API or do semantic versioning anytime soon - so keep that in mind when updating packages

Other Transports / EventStores

I welcome pull requests for other transports or stores - otherwise they'll only be added if I need them

Nuget

Nuget packages are available under the id Aggregates.NET. There are also binaries and source code releases available via github.

Documentation

This is a one man project so documentation is lacking - sorry about that. If you have any questions about using Aggregates.NET feel free to contact me via email or slack (the ddd/cqrs slack group)

aggregates.net's People

Contributors

charlessolar avatar

Watchers

 avatar  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.