Scribbly.Eventually.Testing
0.1.0
dotnet add package Scribbly.Eventually.Testing --version 0.1.0
NuGet\Install-Package Scribbly.Eventually.Testing -Version 0.1.0
<PackageReference Include="Scribbly.Eventually.Testing" Version="0.1.0" />
<PackageVersion Include="Scribbly.Eventually.Testing" Version="0.1.0" />
<PackageReference Include="Scribbly.Eventually.Testing" />
paket add Scribbly.Eventually.Testing --version 0.1.0
#r "nuget: Scribbly.Eventually.Testing, 0.1.0"
#:package Scribbly.Eventually.Testing@0.1.0
#addin nuget:?package=Scribbly.Eventually.Testing&version=0.1.0
#tool nuget:?package=Scribbly.Eventually.Testing&version=0.1.0
Eventually
An Event sourcing framework used by Scribbly.Fun free for use and contributions.
🏃♂️ Aggregate
Aggregates are the thing, yup the thing your commands and events effect. Aggregates should extend the Aggregate
abstract class.
Aggregates should include an apply method for each type of event it's expected to receive.
class Box: Aggregate
{
public Capacity? Capacity { get; private set; }
public Shipping_label? Shipping_label { get; private set; }
public List<Bottle> Contents { get; } = new();
public bool Closed { get; private set; }
public bool Shipped { get; private set; }
public void Apply(Box_created @event)
{
Capacity = @event.Capacity;
}
public void Apply(Beer_added @event)
{
Contents.Add(@event.Beer);
}
public void Apply(Label_applied @event)
{
Shipping_label = @event.Label;
}
public void Apply(Box_shipped @event)
{
Shipped = true;
}
}
💪 Commands
Commands command the system to act on an aggregate. A command must implement the ICommand
interface
public record ShipBox : ICommand;
🛒 Handlers
A handle accepts the command and applies business logic. Command handlers should extend the CommandHandler<TCommand, TAggregate>
base class.
A handlers purpose is to encapsulate all the business logic.
internal class ShipBoxHandler(
IEnumerable<IEvent> eventStream,
Action<IEvent> publishEvent)
: CommandHandler<Ship_box, Box>(eventStream, publishEvent)
{
protected override IEnumerable<IEvent> HandleCommand(
Box aggregate,
Ship_box command)
{
if (aggregate is { Closed: true, Shipping_label: not null })
{
yield return new Box_shipped();
yield break;
}
if (!aggregate.Closed)
yield return new Box_was_not_ready(
Box_was_not_ready.Fail_reason.Box_was_not_closed);
if (aggregate.Shipping_label is null)
yield return new Box_was_not_ready(
Box_was_not_ready.Fail_reason.Box_has_no_shipping_label);
}
}
📆 Events
A event is the result of the applied command. An event must implement the IEvent
interface
public record BoxShipped : IEvent;
public record BoxNotReadyToShip(Reason Reason) : IEvent;
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. 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 is compatible. 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. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- FluentAssertions (= 7.2.0)
- Scribbly.Eventually (>= 0.1.0)
-
net8.0
- FluentAssertions (= 7.2.0)
- Scribbly.Eventually (>= 0.1.0)
-
net9.0
- FluentAssertions (= 7.2.0)
- Scribbly.Eventually (>= 0.1.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 |
---|---|---|
0.1.0 | 63 | 7/4/2025 |