Consideremos un ejemplo simple del patrón DAO. Deje Person
es un objeto de valor y PersonDAO
es el rasgo correspondiente, que proporciona métodos para almacenar/recuperar Person
a/desde la base de datos. ¿El patrón DAO está obsoleto en Scala?
trait PersonDAO { def create(p:Person) def find(id:Int) def update(p:Person) def delete(id:Int) }
Utilizamos este patrón (a diferencia de Active Record, por ejemplo), si queremos separar el dominio comercial y la lógica de persistencia.
¿Qué sucede si usamos another approach en su lugar? Crearemos PersonDatabaseAdapter
trait PersonDatabaseAdapter{ def create def retrieve(id:Int) def update def delete }
y conversión implícita de Person
a ella.
implicit def toDatabaseAdapter(person:Person) = new PersonDatabaseAdapter { def create = ... def retrieve(id:Int) = ... def update = ... def delete = ... }
Ahora bien, si importamos estas conversiones, podemos escribir código de cliente para manipular Persons
y almacenar/recuperar a/desde la base de datos de la siguiente manera:
val person1 = new Person ... person1.create ... val person2 = new Person ... person2.retrieve(id) ...
Este código es el Active Record
pero el dominio comercial y la persistencia aún están separados.
¿Tiene sentido?
¿Sabía que después de aplicar el azúcar sintético de Scala, actúa exactamente de la misma manera que el patrón DAO? – pedrofurla