2016-10-05 4 views
0

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

class MyController @Inject() {...} 

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

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

Это удается прочитать мой конф и создать соответствующий объект базы данных, который можно использовать в данном контроллере - что я не могу поступить иначе без копирования конфигурации базы данных.

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

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

, а затем назвать это как

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

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

ответ

0

Да, это хорошая практика для размещения логики домена в другом модуле, таком как Service, SqlHandler не в контроллере.

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

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

class MyController @Inject()(handler: SqlHandler) 
Смежные вопросы