diff --git a/Directory.Packages.props b/Directory.Packages.props
index aa6cb94..daa5f11 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -10,12 +10,10 @@
-
-
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
\ No newline at end of file
+
diff --git a/src/Fraktalio.FModel/InternalDecider.cs b/src/Fraktalio.FModel/InternalDecider.cs
index f077a80..313cb83 100644
--- a/src/Fraktalio.FModel/InternalDecider.cs
+++ b/src/Fraktalio.FModel/InternalDecider.cs
@@ -1,7 +1,5 @@
namespace Fraktalio.FModel;
-
-
///
/// [InternalDecider] is a datatype that represents the main decision-making algorithm.
/// It has five generic parameters [C], [Si], [So], [Ei], [Eo] , representing the type of the values that [InternalDecider] may contain or use.
@@ -60,7 +58,7 @@ internal InternalDecider(Func> decide,
///
/// Cn Command new
///
- public InternalDecider MapLeftOnCommand(Func f)
+ internal InternalDecider MapLeftOnCommand(Func f)
{
return new InternalDecider(
(cn, si) => Decide(f(cn), si),
@@ -142,7 +140,7 @@ public InternalDecider MapLeftOnState(Func f)
///
///
///
- public InternalDecider MapOnState(Func f)
+ private InternalDecider MapOnState(Func f)
{
return DimapOnState(si => si, f);
}
@@ -153,7 +151,7 @@ public InternalDecider MapOnState(Func f)
///
///
///
- public InternalDecider ApplyOnState(InternalDecider, Ei, Eo> ff)
+ private InternalDecider ApplyOnState(InternalDecider, Ei, Eo> ff)
{
return new InternalDecider(
(c, si) => ff.Decide(c, si).Concat(Decide(c, si)),
@@ -168,7 +166,7 @@ public InternalDecider ApplyOnState(InternalDecider
///
///
- public InternalDecider, Ei, Eo> ProductOnState(InternalDecider fb)
+ internal InternalDecider, Ei, Eo> ProductOnState(InternalDecider fb)
{
return ApplyOnState(fb.MapOnState(b => new Func>(a => new Tuple(a, b))));
}
@@ -205,19 +203,19 @@ internal static class InternalDeciderExtensions
this InternalDecider x,
InternalDecider y)
where C : class?, C_SUPER?
- where C2 : class?, C_SUPER
- where Ei : Ei_SUPER
+ where C2 : class, C_SUPER
+ where Ei : class?, Ei_SUPER?
where Eo : Eo_SUPER
- where Ei2 : Ei_SUPER
+ where Ei2 : class, Ei_SUPER
where Eo2 : Eo_SUPER
{
- var deciderX = x.MapLeftOnCommand(c => (c as C)!)
+ var deciderX = x.MapLeftOnCommand(c => c as C)
.MapLeftOnState>(pair => pair.Item1)
- .DimapOnEvent(ei => (Ei)ei!, eo => eo);
+ .DimapOnEvent(ei => ei as Ei, eo => eo);
- var deciderY = y.MapLeftOnCommand(c => (c as C2)!)
+ var deciderY = y.MapLeftOnCommand(c => c as C2)
.MapLeftOnState>(pair => pair.Item2)
- .DimapOnEvent(ei => (Ei2)ei!, eo => eo);
+ .DimapOnEvent(ei => ei as Ei2, eo => eo);
return deciderX.ProductOnState(deciderY);
}
diff --git a/src/Fraktalio.FModel/SagaExtensions.cs b/src/Fraktalio.FModel/SagaExtensions.cs
index d0829cd..95386e9 100644
--- a/src/Fraktalio.FModel/SagaExtensions.cs
+++ b/src/Fraktalio.FModel/SagaExtensions.cs
@@ -2,6 +2,15 @@ namespace Fraktalio.FModel;
public static class SagaExtensions
{
+ ///
+ /// Saga DSL - A convenient builder DSL for the see cref="Saga{AR,A}"/>
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static Saga ToSaga(this Func> react) => new(react);
+
///
/// Combines [Saga]s into one [Saga]
///
diff --git a/src/Fraktalio.FModel/SagaFactory.cs b/src/Fraktalio.FModel/SagaFactory.cs
deleted file mode 100644
index 7a9b94e..0000000
--- a/src/Fraktalio.FModel/SagaFactory.cs
+++ /dev/null
@@ -1,16 +0,0 @@
-namespace Fraktalio.FModel;
-
-public static class SagaFactory
-{
- ///
- /// Saga DSL - A convenient builder DSL for the see cref="Saga{AR,A}"/>
- ///
- ///
- ///
- ///
- ///
- public static Saga Create(Func> react)
- {
- return new Saga(react);
- }
-}
diff --git a/test/Fraktalio.FModel.Tests/Examples/NumberSagaFactory.cs b/test/Fraktalio.FModel.Tests/Examples/NumberSagaFactory.cs
index 715d082..5fcb6bc 100644
--- a/test/Fraktalio.FModel.Tests/Examples/NumberSagaFactory.cs
+++ b/test/Fraktalio.FModel.Tests/Examples/NumberSagaFactory.cs
@@ -1,4 +1,3 @@
-using Fraktalio.FModel;
using Fraktalio.FModel.Tests.Examples.Numbers;
namespace Fraktalio.FModel.Tests.Examples;
@@ -11,31 +10,19 @@ namespace Fraktalio.FModel.Tests.Examples;
public static class NumberSagaFactory
{
- public static Saga CreateEvenNumberSaga()
- {
- var react = EvenNumberSaga;
- return SagaFactory.Create(react);
- }
-
- public static Saga CreateOddNumberSaga()
- {
- var react = OddNumberSaga;
- return SagaFactory.Create(react);
- }
+ public static Saga EvenNumberSaga() => EvenNumberSagaReact().ToSaga();
///
- /// Very simple Number saga, just for fun ;)
+ /// Even number saga
///
- /// It reacts on Action Results of type of any Event (Even or Odd) and issue a Command/Action (Odd or Even)
- /// For example if the EvenNumberAdded happened with value 4, a new command of type AddOddNumber will be published with value EvenNumberAdded-1=3
+ /// It reacts on Action Results of type of any [NumberEvent.EvenNumberEvent] and issue a Command/Action of type [NumberCommand.OddNumberCommand]
///
/// The event
/// List of commands
- private static IEnumerable NumberSaga(NumberEvent numberEvent)
- {
- return numberEvent switch
+ private static Func> EvenNumberSagaReact() =>
+ numberEvent => numberEvent switch
{
- EvenNumberAdded evenNumberAdded => new NumberCommand[]
+ EvenNumberAdded evenNumberAdded => new OddNumberCommand[]
{
new OddNumberCommand.AddOddNumber(
new Description($"{evenNumberAdded.Value.Value - 1}"),
@@ -43,66 +30,18 @@ private static IEnumerable NumberSaga(NumberEvent numberEvent)
)
},
- EvenNumberEvent.EvenNumberSubtracted evenNumberSubtracted => new NumberCommand[]
- {
+ EvenNumberEvent.EvenNumberSubtracted evenNumberSubtracted =>
+ [
new OddNumberCommand.SubtractOddNumber(
new Description($"{evenNumberSubtracted.Value.Value - 1}"),
new Number(evenNumberSubtracted.Value.Value - 1)
)
- },
+ ],
- OddNumberEvent.OddNumberAdded oddNumberAdded => new NumberCommand[]
- {
- new EvenNumberCommand.AddEvenNumber(
- new Description($"{oddNumberAdded.Value.Value + 1}"),
- new Number(oddNumberAdded.Value.Value + 1)
- )
- },
-
- OddNumberEvent.OddNumberSubtracted oddNumberSubtracted => new NumberCommand[]
- {
- new EvenNumberCommand.SubtractEvenNumber(
- new Description($"{oddNumberSubtracted.Value.Value + 1}"),
- new Number(oddNumberSubtracted.Value.Value + 1)
- )
- },
-
- _ => Enumerable.Empty()
+ _ => []
};
- }
-
- ///
- /// Even number saga
- ///
- /// It reacts on Action Results of type of any [NumberEvent.EvenNumberEvent] and issue a Command/Action of type [NumberCommand.OddNumberCommand]
- ///
- /// The event
- /// List of commands
- private static IEnumerable EvenNumberSaga(
- this EvenNumberEvent? numberEvent)
- {
- return numberEvent switch
- {
- EvenNumberAdded evenNumberAdded => new OddNumberCommand[]
- {
- new OddNumberCommand.AddOddNumber(
- new Description($"{evenNumberAdded.Value.Value - 1}"),
- new Number(evenNumberAdded.Value.Value - 1)
- )
- },
- EvenNumberEvent.EvenNumberSubtracted evenNumberSubtracted => new OddNumberCommand
- []
- {
- new OddNumberCommand.SubtractOddNumber(
- new Description($"{evenNumberSubtracted.Value.Value - 1}"),
- new Number(evenNumberSubtracted.Value.Value - 1)
- )
- },
-
- _ => Enumerable.Empty()
- };
- }
+ public static Saga OddNumberSaga() => OddNumberSagaReact().ToSaga();
///
/// Odd number saga
@@ -111,10 +50,8 @@ private static IEnumerable EvenNumberSaga(
///
/// The event
/// List of commands
- public static IEnumerable OddNumberSaga(
- this OddNumberEvent? numberEvent)
- {
- return numberEvent switch
+ private static Func> OddNumberSagaReact() =>
+ numberEvent => numberEvent switch
{
OddNumberEvent.OddNumberAdded oddNumberAdded => new EvenNumberCommand[]
{
@@ -124,15 +61,14 @@ public static IEnumerable OddNumberSaga(
)
},
- OddNumberEvent.OddNumberSubtracted oddNumberSubtracted => new EvenNumberCommand[]
- {
+ OddNumberEvent.OddNumberSubtracted oddNumberSubtracted =>
+ [
new EvenNumberCommand.SubtractEvenNumber(
new Description($"{oddNumberSubtracted.Value.Value - 1}"),
new Number(oddNumberSubtracted.Value.Value - 1)
)
- },
+ ],
- _ => Enumerable.Empty()
+ _ => []
};
- }
}
diff --git a/test/Fraktalio.FModel.Tests/SagaTest.cs b/test/Fraktalio.FModel.Tests/SagaTest.cs
index 061c1dc..914d030 100644
--- a/test/Fraktalio.FModel.Tests/SagaTest.cs
+++ b/test/Fraktalio.FModel.Tests/SagaTest.cs
@@ -1,11 +1,10 @@
-using Fraktalio.FModel.Tests.Examples;
-using Fraktalio.FModel.Tests.Examples.Numbers;
-
+using Fraktalio.FModel.Tests.Examples.Numbers;
using EvenNumberEvent = Fraktalio.FModel.Tests.Examples.Numbers.NumberEvent.EvenNumberEvent;
using EvenNumberAdded = Fraktalio.FModel.Tests.Examples.Numbers.NumberEvent.EvenNumberEvent.EvenNumberAdded;
using OddNumberEvent = Fraktalio.FModel.Tests.Examples.Numbers.NumberEvent.OddNumberEvent;
using OddNumberCommand = Fraktalio.FModel.Tests.Examples.Numbers.NumberCommand.OddNumberCommand;
using EvenNumberCommand = Fraktalio.FModel.Tests.Examples.Numbers.NumberCommand.EvenNumberCommand;
+using static Fraktalio.FModel.Tests.Examples.NumberSagaFactory;
namespace Fraktalio.FModel.Tests;
@@ -18,8 +17,8 @@ public class SagaTest
[SetUp]
public void Setup()
{
- _evenSaga = NumberSagaFactory.CreateEvenNumberSaga();
- _oddSaga = NumberSagaFactory.CreateOddNumberSaga();
+ _evenSaga = EvenNumberSaga();
+ _oddSaga = OddNumberSaga();
}
[Test]