Сохранение состояния, которое находится в POCO/DTO с использованием Actor Model

Я искал некоторые варианты использования или примеры кода, которые иллюстрируют, как можно сохранить состояние, которое находится в простых классах модели DTO/POCO, с использованием модели актора, которая реализует бизнес-логику.

Спасибо

1 ответ

Я могу ответить только за Орлеан.

Есть несколько примеров, показывающих различные части, необходимые для сохранения состояния:

https://github.com/dotnet/orleans/tree/master/Samples/StorageProviders

По сути, вы создаете класс для хранения вашего состояния зерна следующим образом:

public class MyState : GrainState
{
  public string StringValue { get; set; }
  public int IntValue { get; set; }
  public DateTime DateTimeValue { get; set; }
  public Guid GuidValue { get; set; }
  public IGrain1 GrainValue { get; set; }
}

(хорошо, так что это не POCO)

Затем вы можете создать зерно, которое использует этот класс как его состояние:

[ StorageProvider( ProviderName = "myprovider" ) ]
public class Grain1 : Grain< MyState >, IGrain1
{
  public Task Set( string stringValue, int intValue, DateTime dateTimeValue, Guid guidValue, IGrain1 grainValue )
  {
    State.StringValue = stringValue;
    State.IntValue = intValue;
    State.DateTimeValue = dateTimeValue;
    State.GuidValue = guidValue;
    State.GrainValue = grainValue;
    return WriteStateAsync();
  }
}

Базовый механизм, используемый для фактического хранения состояния, является параметром конфигурации. Это готовое хранилище таблиц Azure, но есть несколько других вариантов, включая Redis, хранилище BLOB-объектов Azure и SQL Server.

Другие вопросы по тегам