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] } 很明显,无论环境如何,您都可以为每个业务类提供正确的实现.它是该类型的继承功能,与您使用它的方式无关. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |