Может ли ActorContext (getContext ()) быть передан за пределы Actor для создания дочерних акторов? - PullRequest
0 голосов
/ 28 мая 2019

Я хочу иметь класс ActorFactory, как показано ниже

public class SampleActorFactory {
  // Simple create method
  public createActor(AbstractActor.ActorContext actorContext, Props props) {
     return actorContext.actorOf(props);
  }
 // other complex create methods
 ...
}

Можно ли создавать дочернего актера с использованием вышеуказанного фабричного класса, или это считается плохой практикой?Если считается плохой практикой, то почему?

Например:

public class SampleActor extends AbstractActor {
 private final SampleActorFactory sampleActorFactory;
 @Override 
 public Receive createReceive() {
        return receiveBuilder()
            .match(SampleData.class, sampleData -> {
              Props sampleProps = getSampleProps(...);
              ActorRef childActor = sampleActorFactory.createActor(getContext(), sampleProps);
            })
            .build();

    }
}

1 Ответ

1 голос
/ 28 мая 2019

Я не вижу ничего плохого в этом подходе, у вас должна быть возможность доступа к контексту вне системы акторов.Но .... обычно, чтобы создать актера, вам нужна всего одна строка кода, как показано ниже.С вашим кодом вы должны написать две строки кода (одну для Props и другую для вызова вашего метода createActor ()), где бы вы ни создавали актера.Помимо реализации фабричного метода, если вы добьетесь от него каких-либо дополнительных преимуществ, вы можете пойти на это.

ActorRef demoActor = getContext().system().actorOf(Props.create(MyDemoActor.class, prop1, prop2);
...