Сохранение состояния, которое находится в 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.