gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:41:12 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com