Я сейчас написал несколько приложений с использованием акторов scala, и мне интересно, как люди подходили или справлялись с некоторыми из проблем, с которыми я сталкивался.
Множество классов Messageили!?
У меня есть актер, который реагирует на пользовательскую операцию и должен что-то вызвать.Допустим, это react
с сообщением UserRequestsX(id)
.Постоянная проблема, с которой я сталкиваюсь, заключается в том, что, поскольку я хочу модулировать свои программы, один актер сам по себе не может выполнить действие без привлечения других актеров.Например, предположим, что мне нужно использовать параметр id
, чтобы получить набор значений, а затем их нужно удалить через какой-то другой субъект.Если бы я писал обычную программу на Java, я мог бы сделать что-то вроде:
public void reportTrades(Date date) {
Set<Trade> trades = persistence.lookup(date);
reportService.report(trades);
}
Что достаточно просто.Однако, используя актеров, это становится немного болезненным, потому что я хочу избегать использования !?
.Один актер реагирует на сообщение ReportTrades(date)
, но он должен запросить PersistenceActor
о сделках и затем ReportActor
, чтобы сообщить о них.Единственный способ, который я нашел, это сделать:
react {
case ReportTrades(date) =>
persistenceActor ! GetTradesAndReport(date)
}
Так что в моем PersistenceActor
есть блок реагирования:
react {
case GetTradesAndReport(date) =>
val ts = trades.get(date) //from persietent store
reportActor ! ReportTrades(ts)
}
Но теперь у меня есть 2проблемы:
- Мне нужно создать дополнительные классы сообщений для представления того же запроса (т. е. "сообщить о сделках").На самом деле у меня есть три в этом сценарии, но у меня может быть намного больше - становится проблемой отслеживать эти
- Как мне назвать первое и третье сообщение
ReportTrades
?Смешно называть их обоих ReportTrades
(или, если я это сделаю, я должен поместить их в отдельные пакеты).По существу нет такой вещи, как overloading
класс по типу val
.
Есть что-то, что я пропускаю?Могу ли я избежать этого?Должен ли я просто сдаться и использовать !?
Используют ли люди какую-то организационную структуру, чтобы уточнить, что происходит?