让我的应用程序包含业务类Order
,Product
,Customer
等,我想在数据库中存储/检索它们。斯卡拉DAO与类型分类
通常,我们使用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)}
现在我的问题是,所有DAOs
使用DataSource
实例(数据库连接的工厂),因此我无法将DAOs
定义为objects
。我应该创建一个DataSource
的单例实例,并在初始化时将它传递给所有DAOs
。
比方说,我们有一个函数来创建一个DataSource
:
def dataSource():DataSource = {...}
你将如何实现
DAOs
与
类型类?
有趣。你能解释一下吗? – Michael 2011-04-12 18:15:24
对不起,代码有误。它必须是var,而不是def,我编辑它。 – tonek 2011-04-12 19:21:48
使用这种方法,您实际上在DataSources变量中定义了变量,该变量包含数据源的函数工厂。在生产代码中,您可以使用在对象DataSources中定义的变量的默认值。但在测试中,您可以重新定义该变量以返回您想要的任何内容。 – tonek 2011-04-12 19:29:12