Java 最佳实践-akka actor中的助手方法
我最近重构了我的actor,最终得到了许多helper方法,它们都是actor的一部分。这样做对吗?所有助手方法都应该是自己的参与者吗?我怎样分开Java 最佳实践-akka actor中的助手方法,java,akka,helpers,Java,Akka,Helpers,我最近重构了我的actor,最终得到了许多helper方法,它们都是actor的一部分。这样做对吗?所有助手方法都应该是自己的参与者吗?我怎样分开 public class MyActor extends UntypedActor { public MyActor () { } @Override public void onReceive(Object msg) throws Exception {
public class MyActor extends UntypedActor {
public MyActor () {
}
@Override
public void onReceive(Object msg) throws Exception {
if ( msg instanceof doSomethingComplex) {
doSomethingComplex message = (doSomethingComplex) msg;
doSimple(message.prop);
}
private void doSimple(String prop){
doSimpler(prop);
....
}
private void doSimpler(String prop){
...
....
}
}
助手方法应该在哪里?这些人也应该是演员吗
助手方法是帮助另一个方法执行其任务的方法
任务通常在方法必须执行
由几个较小的任务组成的复杂任务。这个
较小的任务通常由助手方法执行
助手方法通常只用于将较大的任务划分为较小的、更有组织的方法。助手方法应该位于使用它们的类的层次结构中
所有助手方法都应该是自己的参与者吗?如何进行分离?
在回答这些问题时,思考演员是什么很有帮助。德里克·怀亚特(Derek Wyatt)在其著作《阿克卡并发》(Akka Concurrency)中,将演员与人进行了类比(以下是他书中的一段摘录):
你的日常世界充满了并发性。你把它强加给自己
还有你周围的人,他们把这些强加给你。现实世界
关键部分和锁以及同步方法的等价物
数据都是你自己和世界上的人自然处理的。
人们通过一次只做一件事来实现这一点。我们喜欢
假装我们可以同时完成多项任务,但事实并非如此。有什么有意义的吗
我们这样做要求我们只做那一件事。我们可以暂停这项任务
然后再继续,把它换成别的东西,然后
回到它,但实际上一次做不止一件事并不在我们的驾驶室里
那么如果我们想一次做不止一件事呢?答案是
很明显:我们只是使用了不止一个人。房间里没有多少东西
我们从中受益的世界并不是由一群才华横溢的人创造的
人们
这就是为什么参与者使我们的应用程序开发更加直观和高效
我们的应用程序设计更容易推理:它们是按照我们的
日常生活
在同一章的后面,他写道:
演员一次只做一件事;这就是并发的模型。如果你
如果你想让不止一件事情同时发生,那么你需要
创建多个参与者来完成该工作。这很有道理,
正当我们一直在说,演员编程吸引了很多人
你的日常生活经历。如果你想让工作做得更快,就多放点钱
在职人员
在设计参与者系统时,将系统的主要部分分配给具有不同职责的参与者是一个很好的原则。例如,在ETL管道中,可能有:
- 将系统分解为具有明确职责的部分。将每个角色分配给演员
- 如有必要,将每个部分分解为子任务。将每个子任务分配给参与者。帮助确定是否需要进一步分解的一个关键方法是确定独立扩展子任务是否有效
- 如果您愿意,可以将太小而不能作为自己的参与者的功能放在助手方法中
助手方法应该在哪里? 有几个想法:
- 如果一个助手方法只与某个参与者相关,那么在您执行操作时在参与者内部声明它
- 如果一个助手方法可以在不同类型的参与者中使用,那么在一个声明中声明它。或者,将其声明为actor中的