This repo hosts the source for Jet's dotnet new
templates. While that's presently just for Equinox, over time the intention is to add templates for other systems where relevant.
eqxweb
- Boilerplate for an ASP .NET Core Web App, with an associated storage-independent Domain project.eqxwebcs
- Boilerplate for an ASP .NET Core Web App, with an associated storage-independent Domain project ported to C#.eqxprojector
- Boilerplate for a CosmosDb ChangeFeedProcessor, with optional projection to Apache Kafka and associated consumer logic.eqxtestbed
- Host that allows running back-to-back benchmarks when prototyping models, using different stores and/or store configuration parameters.eqxsync
- Boilerplate for a CosmosDb ChangeFeedProcessor that traverses each document in a source store, filtering/enriching/mapping those to Events to be written (consistently) into anEquinox.Cosmos
store with optimized throughput.
As dictated by the design of dotnet's templating mechanism, consumption is ultimately via the .NET Core SDK's dotnet new
CLI facility and/or associated facilities in Visual Studio, Rider etc.
To use from the command line, the outline is:
- Install a template locally (use
dotnet new --list
to view your current list) - Use
dotnet new
to expand the template in a given directory
# install the templates into `dotnet new`s list of available templates so it can be picked up by
# `dotnet new`, Rider, Visual Studio etc.
dotnet new -i Equinox.Templates
# --help shows the options including wiring for storage subsystems,
# -t includes an example Domain, Handler, Service and Controller to test from app to storage subsystem
dotnet new eqxweb -t --help
# if you want to see a C# equivalent:
dotnet new eqxwebcs -t
# see readme.md in the generated code for further instructions regarding the TodoBackend the above -t switch above triggers the inclusion of
start readme.md
# ... to add a Projector and a Consumer
md -p ../tools/My.Tools.Projector | Set-Location
# (-k emits to Kafka and hence implies having a Consumer)
dotnet new eqxprojector -k
start README.md
# ... to add a Testbed
md -p ../tools/My.Tools.Testbed | Set-Location
# -e -c # add EventStore and CosmosDb suppport to got with the default support for MemoryStore
dotnet new eqxtestbed -c -e
start README.md
# run for 1 min with 10000 rps against an in-memory store
dotnet run -p Testbed -- run -d 1 -f 10000 memory
# run for 30 mins with 2000 rps against a local EventStore
dotnet run -p Testbed -- run -f 2000 es
# run for two minutes against CosmosDb (see https://github.com/jet/equinox#quickstart) for provisioning instructions
dotnet run -p Testbed -- run -d 2 cosmos
# ... to add a Sync tool
md -p ../tools/My.Tools.Sync | Set-Location
# (-m includes an example of how to upconvert from similar event-sourced representations in an existing store)
dotnet new eqxsync -m
start Sync/README.md
Please don't hesitate to create a GitHub issue for any questions so others can benefit from the discussion. For any significant planned changes or additions, please err on the side of reaching out early so we can align expectationss - there's nothing more frustrating than having your hard work not yielding a mutually agreeable result ;)
See the Equinox repo's CONTRIBUTING section for general guidelines wrt how contributions are considered specifically wrt Equinox.
The following sorts of things are top of the list for the eqx*
templates at the present time:
- Fixes for typos, adding of info to the readme or comments in the emitted code etc
- Small-scale cleanup or clarifications of the emitted code
- support for additional languages in the templates
- further straightforward starter projects
While there is no rigid or defined limit to what makes sense to add, it should be borne in mind that dotnet new eqx*
is often going to be a new user's first interaction with Equinox and/or [asp]dotnetcore. Hence there's a delicate (and intrinsically subjective) balance to be struck between:
- simplicity of programming techniques used / beginner friendliness
- brevity of the generated code
- encouraging good design practices