Я пытаюсь обернуть голову доступом к данным с помощью Slick 3.0. После консультаций с различными примерами github я пришел со следующим дизайном.Повторное использование кода драйвера DB Slick на уровне доступа к данным
одноэлементный сликовое объект, где экземпляры DataSource и драйвера инъецируют
class Slick(dataSource: DataSource, val driver: JdbcDriver) {
val db = driver.api.Database.forDataSource(dataSource)
}
черта в БД таблицы где отображения определены
Признак смешивается в верхнем слое, где запросы построены.
trait RecipeTable {
protected val slick: Slick
// the ugly import that have to be added when Slick API is used
import slick.driver.api._
type RecipeRow = (Option[Long], String)
class RecipeTable(tag: Tag) extends Table[RecipeRow](tag, "recipe") {
def id = column[Option[Long]]("id", O.PrimaryKey, O.AutoInc)
def name = column[String]("name")
def * = (id, name)
}
protected val recipes = TableQuery[RecipeTable]
}
Теперь есть очевидный недостаток, что в каждом *Table
черты, а также в любом месте, где это смешивается в мне нужно дублировать импорт slick.driver.api._
для того, чтобы иметь вещи все Slick в области.
Этого я бы хотел избежать. В идеале импорт будет определяться только один раз и повторно использоваться в последующих компонентах.
Не могли бы вы предложить дизайн, который обращается к подобному дублированию?
Я был в основном вдохновлен примером, но импорт также дублируется.
Спасибо за всесторонний ответ. Хотя я сомневаюсь, что копирование '' import driver.api._'' на самом деле является хорошей вещью, похоже, это единственный способ пойти с Slick. Разумеется, для проектирования API должны быть аргументы, но все же я не понимаю, почему для создания запросов недостаточно экземпляра '' TableQuery [T] '' (учитывая тот факт, что стандартные конструкторы SQL поддерживаются по * всем * драйверам). –
Ну ... когда вы используете 'java.time.ZoneDateTime', вам нужно импортировать его там, где вам нужно ...это тот же принцип. Большинство внутренних элементов Slick разработаны как «implicits», которые могут быть импортированы или изменены по мере необходимости, не затрагивая ничего. –