将DAO层放在Scala Akka Actor中

时间:2015-12-15 23:06:10

标签: scala persistence akka

我对Scala感到温暖,但对Akka来说仍然很新。这似乎是一个相当简单的问题,但我无法找到有关这种特定方法的任何信息,这告诉我,我的想法可能有问题,或者已经有一种非常标准的方法可以做到这一点。

我发现的所有解决方案都围绕让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)actor将是持久且无状态的(尽管DAO将拥有数据库连接的句柄)。我的意思是持久性是它们不会被实际称它们的演员实例化。

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

1 个答案:

答案 0 :(得分:3)

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

需要注意的一点是,如果您的DAO是同步的,那么对所有DOA调用使用单个actor将意味着一次只能执行一个DB调用。这可能是也可能不是。