Play: где / как я должен ввести свой обработчик базы данных

#java #scala #playframework-2.0

#java #scala #playframework-2.0

Вопрос:

Проект воспроизведения (Scala или Java, я использую Scala здесь), созданный с помощью activator, начинается с таких примеров, как:

 class MyController @Inject() {...}
  

Существует несколько таких компонентов, которые можно вводить по умолчанию, например Environment , и один из них Database :

 class MyController @Inject()(db: Database) {...}
  

Ему удается прочитать мой conf и создать соответствующий объект базы данных, который я могу использовать в этом контроллере, что я не могу сделать иначе, не скопировав конфигурацию БД.

Но подходящее ли это место для этого? Большая часть контроллера не будет использовать базу данных, так почему бы не использовать своего рода «SqlHandler», который выполняет все связанные с базой данных вещи. Я думал о чем-то вроде

 @Singleton
class SqlHandler @Inject()(db: Database) {
  def select() = {...db...}
  def insert() = {...db...}
}
  

а затем вызовите его следующим образом

 class MyController @Inject() {
  def mySqlAction = Action {
    SqlHandler.select()
  }
}
  

Это хорошая идея? Должен ли я вообще использовать инъекцию? И как мне тогда использовать этот синглтон в остальной части моего приложения? (на данный момент my SqlHandler является an object , поскольку его методы являются статическими).

Ответ №1:

Да, рекомендуется размещать логику домена в другом модуле, таком как Service, SqlHandler, а не в контроллере.

Я размещаю пользовательское действие с аутентификацией и фильтрованием, обработкой ошибок и манипулированием кодом результата в контроллере

Вы можете внедрить SqlHanlder в контроллер.

 class MyController @Inject()(handler: SqlHandler)