我现在已经使用 scala actor 编写了一些应用程序,并且我对人们如何处理或处理我遇到的一些问题感兴趣。
过多的消息类或!?
我有一个对用户操作做出反应并且必须导致某些事情发生的演员。假设它react
是一条消息UserRequestsX(id)
。我遇到的一个持续问题是,因为我想模块化我的程序,一个演员自己无法在不涉及其他演员的情况下完成动作。例如,假设我需要使用id
参数来检索一堆值,然后需要通过其他一些参与者删除这些值。如果我正在编写一个普通的 Java 程序,我可能会执行以下操作:
public void reportTrades(Date date) {
Set<Trade> trades = persistence.lookup(date);
reportService.report(trades);
}
这很简单。然而,使用演员这变得有点痛苦,因为我想避免使用 !?
. 一个参与者对消息做出反应,ReportTrades(date)
但它必须要求 aPersistenceActor
进行交易,然后 aReportActor
报告它们。我发现这样做的唯一方法是:
react {
case ReportTrades(date) =>
persistenceActor ! GetTradesAndReport(date)
}
所以在我的PersistenceActor
我有一个反应块:
react {
case GetTradesAndReport(date) =>
val ts = trades.get(date) //from persietent store
reportActor ! ReportTrades(ts)
}
但现在我有两个问题:
- 我必须创建额外的消息类来表示相同的请求(即“报告交易”)。事实上,在这种情况下我有三个,但我可能还有更多 - 跟踪这些成为一个问题
- 我应该怎么称呼第一条和第三条消息
ReportTrades
?将它们都称为是令人困惑的ReportTrades
(或者如果我这样做,我必须将它们放在单独的包中)。本质上不存在overloading
按val
类型划分的类。
有什么我想念的吗?我可以避免这种情况吗?我应该放弃并使用!?
人们是否使用某种组织结构来澄清正在发生的事情?