Dundee.Core 0.0.9.8

The owner has unlisted this package. This could mean that the package is deprecated, has security vulnerabilities or shouldn't be used anymore.
dotnet add package Dundee.Core --version 0.0.9.8
NuGet\Install-Package Dundee.Core -Version 0.0.9.8
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Dundee.Core" Version="0.0.9.8" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Dundee.Core --version 0.0.9.8
#r "nuget: Dundee.Core, 0.0.9.8"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// 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:

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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