Dundee.Core
0.0.9.8
dotnet add package Dundee.Core --version 0.0.9.8
NuGet\Install-Package Dundee.Core -Version 0.0.9.8
<PackageReference Include="Dundee.Core" Version="0.0.9.8" />
paket add Dundee.Core --version 0.0.9.8
#r "nuget: Dundee.Core, 0.0.9.8"
// Install Dundee.Core as a Cake Addin
#addin nuget:?package=Dundee.Core&version=0.0.9.8
// Install Dundee.Core as a Cake Tool
#tool nuget:?package=Dundee.Core&version=0.0.9.8
Dundee.Framework
Built using:
- https://github.com/dotnet/orleans
- https://github.com/OrleansContrib/Orleans.Providers.RabbitMQ
- https://github.com/OrleansContrib/Orleans.Providers.MongoDB
- https://github.com/OrleansContrib/Orleans.EventSourcing.Snapshot
- Coffee, trial and error!
This was a playground excercise but feedback would be appreciated.
A wrapper framework for working with Orleans, event driven architecture, with RMQ.
This includes
- A ready to go example with various ways of doing similar things (everyone has their own flavour!)
- Some primitive ways of keeping a queryable index (this is on the todo list)
- GraphQL
Setup
Clone repo, have docker installed and run the docker-compose up
Key points
### startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddRequiredServices(Environment, Configuration, "Dundee.Api", "1");
services.AddOrleansServices(Configuration);
services.AddScoped<IPublishingService, PublishingService>();
//Graph QL
services.AddScoped<CustomerQuery>();
services.AddScoped<CustomerMutation>();
services.AddScoped<CustomerSchema>();
//Dundee
services.AddScoped<IAdapterProcessor, OrleansProcessor>();
services.AddScoped<CustomerAdapter>();
services.AddScoped<PurchaseOrderAdapter>();
}
}
Todo/whats left
- Decide how to package up hardcoded orleans projects for storage and rmq
- Versioning events (Its done but there isnt a proven way to handle this as its based on serialization)
- Code generator assumes that the same structure has been followed and could be improved/less brittle
- Code generators for indexing? Use cachealot? Create queryable props for the aggregate of each state prop (this could later enhanced with an attrib so that large data sets are stored elsewhere)
- Use of projections via eventstore (think destroying data by meta data)
- Replaying events so they publish to indexing (this might already be in but it would be costly)
- Tidy up code examples
- Demonstrate production config
- Introduce auto mapper to simplfy gql (or provide an example that maps directly to the aggregate state)
- Introduce an alternative processor (experimentally remove orleans)
- Look at projecting to sql and dynamic EF migrations (see nuget package).
- Add unit tests to framework
- Add further tests using docker compose
- Look at compositions (keeping the grains small works best)
- Change project for MongoDb (experimentally using gridfs however no evidence this is needed and should be seen as not for production)
- GQL aggregation
- Code linting and scanning
- Large object attribute that can be stored and streamed on demand
- Scan for all other Todos!
Remarks/Questions
There is a good amount of refactoring to do in some key areas which I intend to cover over time as I think this could be a useful way to get the benefits Orleans, EDA and GQL without an overly exhaustive uphill climb.
Also there some direct copies of other projects namely https://github.com/OrleansContrib/Orleans.Providers.MongoDB and https://github.com/OrleansContrib/Orleans.Providers.RabbitMQ that I need to review as their great work, alongside the work of the Orleans project, is what drove this forward the first place!
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 is compatible. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net5.0
- Dundee.Shared (>= 0.0.9.8)
- Newtonsoft.Json (>= 13.0.1)
- Serialize.Linq (>= 2.0.0)
- System.Linq.Expressions (>= 4.3.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|
Alpha