Я работаю с установленным кодом базы в Акку и я вижу, эта картина очень много:Любой способ избежать определения метода реквизита в объекте компаньона Akka?
class Bar(a: A, b: B, c: C) extends Actor {
// body of actor
}
object Bar {
def props(a: A, b: B, c: C) = Props(new Bar(a = a, b = b, c = c)
}
Но метод реквизита чувствует себя некрасиво, как геттер/сеттер в Java. Есть лучший способ сделать это?
Я думал, что можно создать актера непосредственно, например.
var child = context.actorOf(Props(new Bar(a, b, c))
Поскольку это не намного сложнее, чем версия с использованием реквизита:
var child = context.actorOf(Bar.Props(a, b, c))
Однако если я понимаю, этот пост на Deprecation of Closures Taking Props то это плохая практика. Вместо этого они выступают за использование:
var child = context.actorOf(Props(classOf[Bar], a, b, c))
Но тогда это страдает от проблем с рефакторингом, так как контуры Райана ниже?
Помещение 'Props' в объект-компаньон держит его ближе к определению созданного им актера и облегчает реорганизацию этого актера позже, так как у вас не будет нескольких« подставных », лежащих вокруг одного и того же актера. – Ryan
Привет, Райан! Я наблюдаю точно противоположное. Эта конструкция делает рефакторинг хуже, потому что теперь мне нужно изменить все конструкторы и методы реквизита. Если нет других ограничений здесь, я не понимаю? Можете ли вы объяснить немного больше? –
Вы неправильно поняли. Ваш первый пример - это то, что я защищал, а не тот, который вы добавили в свой пост. – Ryan