加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala中的DAO类型类

发布时间:2020-12-16 10:01:39 所属栏目:安全 来源:网络整理
导读:让我的应用程序包含业务类Order,Product,Customer等,我想在数据库中存储/检索它们. 通常,我们使用DAO模式来实现此目的.也就是说,我们为每个业务类定义DAO接口和实现:OrderDAO,ProductDAO等.现在我想使用类型类模式: trait DAO[T] { def create(t:T) ... //
让我的应用程序包含业务类Order,Product,Customer等,我想在数据库中存储/检索它们.

通常,我们使用DAO模式来实现此目的.也就是说,我们为每个业务类定义DAO接口和实现:OrderDAO,ProductDAO等.现在我想使用类型类模式:

trait DAO[T] {
  def create(t:T)
  ... // other CRUD operations
}
...
// DAO implementations for specific business objects
implicit object OrderDAO extends DAO[Order] {
   def create(o:Order) {...}
   ... // other CRUD operations
}
...
// create a business object in the database
def create[T](t:T)(implicit dao:DAO[T]) {dao.create(t)}

现在我的问题是所有DAO都使用DataSource实例(数据库连接工厂),所以我不能将DAO定义为对象.我应该创建一个DataSource的单例实例,并在初始化时将它传递给所有DAO.

假设我们有一个创建DataSource的函数:

def dataSource():DataSource = {...}

你将如何实现类型类的DAO?

解决方法

我不认为类型类是去这里的方式.类型类用于描述功能,而不是替代DI.

例如,如果您的DAO写入键值存储,则可能需要将类转换为键和值的映射的功能.

在这种情况下,类型类是:

trait KeyValuable[T] {
  def toMap(t: T): Map[String,String]
}

很明显,无论环境如何,您都可以为每个业务类提供正确的实现.它是该类型的继承功能,与您使用它的方式无关.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读