将DAO层容纳在Scala Akka Actor中



我对Scala有所了解,但对Akka还是很陌生。这似乎是一个相当简单的问题,但我找不到关于这种具体方法的任何信息,这告诉我,我的想法可能有问题,或者已经有了非常标准的方法。

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

我的问题是,让DAO本身成为一个持久的参与者是否可行。大致如下:

class UserDAO extends Actor {
    val db = actorSystem.actorSelection("/repository/dao")
    def receive = {
        case GetUserById(id) => sender ! (db ? RunStoredProc(SpGetUserById(id)))
        ...
    }
}

以上内容纯粹是假设的伪代码,所有方法(即RunStoredProc)仅作为示例。我更好奇这样一个系统的设计决策背后的理智。UserDAODAOdb)参与者将是持久的和无状态的(尽管DAO将持有数据库连接的句柄)。我所说的持久性是指它们不会被实际调用它们的参与者实例化。

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

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

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

最新更新