在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

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...