Cycles 1.0.2

dotnet add package Cycles --version 1.0.2                
NuGet\Install-Package Cycles -Version 1.0.2                
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="Cycles" Version="1.0.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Cycles --version 1.0.2                
#r "nuget: Cycles, 1.0.2"                
#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 Cycles as a Cake Addin
#addin nuget:?package=Cycles&version=1.0.2

// Install Cycles as a Cake Tool
#tool nuget:?package=Cycles&version=1.0.2                

Cycles

Nuget C# Version Framework Version .NETFramework Version GitHub

A strict FSM (Finite-State Machine) architecture implementation.


Core Concept

A FSM where you add states each one with a callback, and this callback has a data type as parameter.

And when you set the state execute the callback sending the data.

Here a illustrative code snippet:

AddState(/* pass state here... */, (data) => { 
    // Do something with the data here...
});

SetState(/* pass state here... */, /* pass data here... */);

Why?

OOP (Object Oriented Paradigm) can be painful if you lose the control of the data mutation and of the order which things happen.

My intention with Cycles is turn things easy during the development and in the support of my applications by turning the code more legible and debuggable.

A library for this is not really necessary, but it's help to set a implementation pattern.


Tips

  • Avoid to create fields or properties to store data in a Cycle.
  • Every Cycle must have at least a state type and a callback.
  • Every Cycle with a data type has a data object as input in the state events.

Usage example

It's a Hello World example without any practical purpose, just to be a simple implementation:

// A state list. It can be any type: enum, string, number, object etc.
public enum State
{
    PreLoading,
    Executing,
    Ending
}

// A data to exchange from a state to other.
public struct Data
{
    public string name;
}

// The cycle class using the state and data declared before.
// The data type is optional, the cycle can be dataless.
public class MyCycle : Cycle<State, Data>
{
    // Add your states events in the constructor.
    public MyCycle()
    {
        AddState(State.PreLoading, Preload);
        AddState(State.Executing, Execute);
        AddState(State.Ending, End);
    }

    // Is a best practice set the first state in a method.
    public void Start(string name)
    {
        SetState(State.PreLoading, new Data { name = name });
    }

    #region Events

    private void Preload(Data data)
    {
        // Do something before load here.

        SetState(State.Executing, data);
    }

    private void Execute(Data data)
    {
        Console.WriteLine($"Hello {data.name}!");
        SetState(State.Ending, data);
    }

    private void End(Data data)
    {
        Kill();
    }

    #endregion
}
Product 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 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. 
.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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

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
1.0.2 549 6/26/2020
1.0.1 659 7/1/2019
1.0.0 597 5/28/2019

Tests added to source code.