让我们考虑一个
DAO模式的简单例子.设Person是一个值对象,PersonDAO是对应的特征,它提供了向/从数据库存储/检索Person的方法.
trait PersonDAO { def create(p:Person) def find(id:Int) def update(p:Person) def delete(id:Int) }
如果我们想要分离业务域和持久性逻辑,我们使用这种模式(例如,与Active Record相反).
如果我们使用another approach怎么办?
我们将创建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 = ... }
现在,如果我们导入这些转换,我们可以编写客户端代码来操作Persons,并以下列方式将数据存储/检索到数据库:
val person1 = new Person ... person1.create ... val person2 = new Person ... person2.retrieve(id) ...
此代码看起来像Active Record,但业务域和持久性仍然是分开的.
是否有意义 ?
解决方法
好吧,我对“过时”的模式一无所知.模式是一种模式,您可以在适当的地方使用它.此外,我不知道语言是否应该在语言中过时,除非语言本身使用相同的功能实现它.
据我所知,数据访问对象并不过时:
http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html