2015-12-15 2 views
2

Я добираюсь до Scala, но все еще очень новенький в Akka. Это похоже на довольно простой вопрос, но я не смог найти никакой информации об этом конкретном подходе, который говорит мне, что что-то может быть неправильно с моим мышлением или что есть уже очень стандартный способ сделать это.Корпус DAO-слоя внутри Scala Akka Актер

Все решения, которые я нашел, вращаются вокруг того, что акк Акка совершает вызовы на предварительно построенный сервисный уровень, который будет обрабатывать логику базы данных.

Мой вопрос заключается в том, возможно ли сделать DAO постоянным действующим лицом. Что-то вдоль линий этого:

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

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

выше, является чисто гипотетическим псевдокодом и все методы (т.е. RunStoredProc) предназначен только как примеры. Мне более любопытно, насколько разумно за дизайн-решение такой системы. Актеры UserDAO и DAO (db) будут постоянными и безстоящими (хотя DAO будет удерживать дескриптор соединения с базой данных). То, что я подразумеваю под постоянным, заключается в том, что они не будут создаваться актерами, которые на самом деле их называют.

Я заново изобретаю колесо здесь?

ответ

2

Ваш подход кажется совершенно выполнимым. Это позволит вам обрабатывать всю логику соединения в одном месте.

Следует иметь в виду, что если ваш DAO синхронно, использование одного актера для всех вызовов DOA означает, что только один вызов БД может выполняться за один раз. Это может быть или не быть желательным.

Смежные вопросы