Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Платформа Reliable Actors позволяет создавать субъекты, используя многие из одних и то же методов, которые вы будете использовать в объектно-ориентированном дизайне. Одним из этих методов является полиморфизм, который позволяет типам и интерфейсам наследовать от более обобщенных родителей. Наследование в платформе Надежных субъектов обычно следует модели .NET с несколькими дополнительными ограничениями. В случае Java/Linux он следует модели Java.
Интерфейсы
Платформа Надежных субъектов требует определить по крайней мере один интерфейс, который будет реализован типом субъекта. Этот интерфейс используется для создания прокси-класса, который может использоваться клиентами для взаимодействия с актерами. Интерфейсы могут наследоваться от других интерфейсов, если каждый интерфейс, реализуемый типом актера, и все его предки в конечном итоге являются производными от IActor(C#) или Actor(Java). IActor(C#) и Actor(Java) — это платформенные базовые интерфейсы для субъектов в платформах .NET и Java соответственно. Таким образом, классический пример полиморфизма с использованием фигур может выглядеть примерно так:
Типы
Вы также можете создать иерархию типов субъектов, производных от базового класса Субъекта, предоставляемого платформой. В случае фигур может быть базовый Shape
тип (C#), или ShapeImpl
(Java):
public abstract class Shape : Actor, IShape
{
public abstract Task<int> GetVerticeCount();
public abstract Task<double> GetAreaAsync();
}
public abstract class ShapeImpl extends FabricActor implements Shape
{
public abstract CompletableFuture<int> getVerticeCount();
public abstract CompletableFuture<double> getAreaAsync();
}
Подтипы Shape
(C#) или ShapeImpl
(Java) могут переопределять методы из базы.
[ActorService(Name = "Circle")]
[StatePersistence(StatePersistence.Persisted)]
public class Circle : Shape, ICircle
{
public override Task<int> GetVerticeCount()
{
return Task.FromResult(0);
}
public override async Task<double> GetAreaAsync()
{
CircleState state = await this.StateManager.GetStateAsync<CircleState>("circle");
return Math.PI *
state.Radius *
state.Radius;
}
}
@ActorServiceAttribute(name = "Circle")
@StatePersistenceAttribute(statePersistence = StatePersistence.Persisted)
public class Circle extends ShapeImpl implements Circle
{
@Override
public CompletableFuture<Integer> getVerticeCount()
{
return CompletableFuture.completedFuture(0);
}
@Override
public CompletableFuture<Double> getAreaAsync()
{
return (this.stateManager().getStateAsync<CircleState>("circle").thenApply(state->{
return Math.PI * state.radius * state.radius;
}));
}
}
Обратите внимание на атрибут ActorService
типа актера. Этот атрибут сообщает платформе Reliable Actor, что она должна автоматически создать службу для размещения субъектов этого типа. В некоторых случаях может потребоваться создать базовый тип, который предназначен исключительно для совместного использования функций с подтипами и никогда не будет использоваться для создания экземпляров конкретных субъектов. В этих случаях следует использовать ключевое слово abstract
, указывающее, что вы никогда не создадите актера на основе этого типа.
Дальнейшие действия
- Узнайте , как платформа Reliable Actors использует платформу Service Fabric для обеспечения надежности, масштабируемости и согласованного состояния.
- Узнайте о жизненном цикле субъекта.