Является ли шаблон DAO устаревшим в Scala?

Давайте рассмотрим простой пример паттерна DAO . Пусть Person является объектом значения, а PersonDAO является соответствующей характеристикой, которая предоставляет методы для сохранения / извлечения Person в / из базы данных.

trait PersonDAO {
  def create(p:Person)
  def find(id:Int)
  def update(p:Person)
  def delete(id:Int)
}

Мы используем этот шаблон (в отличие от Active Record , например), если мы хотим разделить бизнес-домен и логику сохранения.

Что, если мы воспользуемся другим подходом ? Мы создадим PersonDatabaseAdapter

trait PersonDatabaseAdapter{
  def create
  def retrieve(id:Int)
  def update
  def delete
}

и неявное преобразование из Person в него.

implicit def toDatabaseAdapter(person:Person) = new PersonDatabaseAdapter {
  def create =  ...
  def retrieve(id:Int) = ...
  def update = ...
  def delete = ...
}

Теперь, если мы импортируем эти преобразования, мы можем написать клиентский код для управления Лица и сохраняют / извлекают их в / из базы данных следующим образом:

val person1 = new Person
...
person1.create
...
val person2 = new Person
...
person2.retrieve(id)
...

Этот код выглядит как Active Record , но бизнес-домен и постоянство по-прежнему разделены.

Это делает смысл?

9
задан Michael 26 March 2011 в 18:38
поделиться