让我们考虑一个简单的例子 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
关于scala - Scala 中的 DAO 模式已经过时了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5444184/