2015-12-15 25 views
2

我正在加热到斯卡拉,但我对阿卡仍然很陌生。这似乎是一个相当直接的问题,但我无法找到关于这种特定方法的任何信息,这告诉我可能是我的想法有问题,或者已经有一个非常标准的方法来做到这一点。在斯卡拉Akka演员中安置DAO层

我发现的所有解决方案都是围绕着一个Akka actor调用预构建的服务层来处理数据库逻辑。

我的问题是让DAO本身成为一个持续的演员是否可行。沿着此线的东西:上述

class UserDAO extends Actor { 
    val db = actorSystem.actorSelection("/repository/dao") 

    def receive = { 
     case GetUserById(id) => sender ! (db ? RunStoredProc(SpGetUserById(id))) 
     ... 
    } 
} 

的纯属假设伪码和所有的方法(即RunStoredProc)旨在仅作为示例。我对这种系统的设计决定背后的理智更加好奇。 UserDAODAOdb)参与者将是持久的和无状态的(尽管DAO将持有数据库连接的句柄)。我所坚持的意思是说,他们不会被实际称为他们的演员实例化。

我在这里重新发明了车轮吗?

回答

2

您的方法似乎完全可行。这将允许您在一个地方处理所有基于连接的逻辑。

需要考虑的一点是,如果您的DAO是同步的,则对于所有DOA调用使用单个actor将意味着一次只能执行一个DB调用。这可能会也可能不会是理想的。