저는 스칼라 액터를 사용하여 몇 가지 응용 프로그램을 작성했으며 사람들이 내가 겪은 문제 중 일부에 접근하거나 처리하는 방법에 관심이 있습니다.스칼라 액터를 실제로 사용하여 응용 프로그램 작성하기
과다한 메시지 클래스 또는!?
나는 사용자 조작에 반응하고 어떤 일이 일어나야 만하는 액터가 있습니다. 메시지 UserRequestsX(id)
에 react
을 말합니다. 내가 가진 계속되는 문제는 프로그램을 모듈화하기를 원하기 때문에 하나의 배우 만이 다른 배우를 포함시키지 않고 액션을 완료 할 수 없다는 것입니다. 예를 들어, 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)
}
을하지만 지금은이 문제가 :
-
를 내가이 일을 찾은 유일한 방법은하는 것입니다
- 같은 요청을 (예 : "보고서 거래")로 표시하려면 추가 메시지 클래스를 만들어야합니다. 사실이 시나리오에서는 3 가지가 있지만 더 많은 것을 가질 수 있습니다. 이러한 문제를 추적하는 것이 문제가됩니다.
- 첫 번째 메시지와 세 번째 메시지는 무엇이라고해야합니까?
ReportTrades
? 그것들을 모두ReportTrades
이라고 부르는 것은 혼란 스럽습니다 (또는 내가하는 경우, 나는 그것들을 별도의 패키지에 넣어야합니다). 기본적으로val
유형별로overloading
클래스가 없습니다.
내가 빠진 것이 있습니까? 이 문제를 피할 수 있습니까? 방금 포기하고 사용해야합니까? !?
사람들은 어떤 일이 벌어지고 있는지 명확히하기 위해 일부 조직 구조를 사용합니까?
"반응"에서 영구 저장소에 직접 액세스하는 것이 안전합니까? 네가 방해 행위를 할 수 없다고 생각 했어.어쩌면 특정 배우에게 "받기"가 필요할 수도 있습니다. –