scala - Scala 中的 DAO 模式已经过时了吗?

标签 scala dao

让我们考虑一个简单的例子 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

http://en.wikipedia.org/wiki/Data_access_object

关于scala - Scala 中的 DAO 模式已经过时了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5444184/

相关文章:

scala - 如何通过相邻对使用非关联函数进行归约

将参数化方法强制转换为函数时,Scala 有奇怪的类型吗?

java - DAO 层测试 : java. lang.IllegalStateException:配置错误:为测试类找到多个@BootstrapWith 声明

java - 使用 Resteasy/Hibernate/Spring 简化 DAO 层

java - 通用 DAO 为什么使用通用类型 Id

java - Spring MVC 域对象处理最佳实践

Scala:确保大括号是平衡的

scala - 显示方法的参数过多

scala - 如何匹配 ScalaTest 中的实例类型

VB6 应用程序在创建后保持对 Access (.mdb) 数据库的锁定,导致错误 3028