scala – Akka Actors可以替换服务层吗?
这更像是一个设计和最佳实践问题.我正在转换应用程序以使用Actors和Futures.目前这些是层(在Akka混合之前).
Play Controller -> Service layer -> (Slick) DAOs 现在想拥有类似的东西 Play Controller -> Actors ->Services (Now they'll return Futures) ->DAO 在这样做时,我发现由于原始服务层具有所有具有所需业务逻辑的方法,因此Actors层看起来就像一个中介.想知道是否可以(从设计的角度来看)摆脱服务层现在一切都将通过Actors? Play controller->Actors (with business methods) -> business methods calling into DAO (which Service methods were doing before) 或者继续使用现有的Service层并仅使用Akka Actors中的那些方法?保持服务层原样的风险是,所有服务方法都将保持公开,并且可以从其他任何地方自由调用(如果有人直接在控制器中调用Service方法(通过传递Actors)或其他东西,则打破模式). 解决方法
基于actor的系统设计有两种方法:
> Actor只是一个多线程抽象,例如TaskExecutors 您需要问自己,您希望在重构时遵循哪一个.为什么呢. 您提到的第一个选项(Actors通过Futures与服务交谈)是一个多线程抽象.当你遇到一个主要的性能瓶颈时,你想要做到这一点.可能演员可以提供帮助,但还有许多其他工具可以做到这一点. 您提到的第二个选项(Actors replace Services)使用actor进行业务域建模.它非常强大.你把你的逻辑放在演员中,演员由较小的演员组成,依此类推.它们中的每一个都代表了您的业务领域的一小部分.演员越小越好.使用此方法有许多优点: >每个参与者都可以在内部使用不同的策略来获取和存储信息.其中一些可能通过Futures使用HTTP服务,其中一些可能使用actor通信,其中一些可能是事件源. 当然,还有一些缺点: >有些业务领域无法轻易地与演员建模. 我希望这能以某种方式帮助你.如果你想对某些事情采取后续行动,那就大声说出来吧.谢谢! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |