Теперь я написал несколько приложений с участием scala, и меня интересует, как люди подошли или столкнулись с некоторыми из проблем, с которыми я столкнулся.
Множество классов сообщений или!?
У меня есть актер, который реагирует на операцию пользователя и должен вызывать что-то. Скажем, 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
.
Есть ли что-то, что мне не хватает? Могу ли я избежать этого? Должен ли я просто отказаться и использовать !?
. Используют ли люди какую-то организационную структуру, чтобы выяснить, что происходит?