我想开发一个框架,用户可以在我们的平台中注入自己的代码,而不知道我们可能会在不久的将来改变的一些实现细节(例如数据库类型)。
我已将代码拆分为两个不同的项目:
但是,我希望他们可以使用某种API的默认实现来测试他们的代码。
例如,在公开API :
中trait UserDatabase {
def getAllUserInfo : List[UserInfo]
...
}
trait ExecutesOnServer{
def doWhaterverYouWant(db <: UserDatabase ) : Unit
}
在用户代码:
中class ExecutesOnServerImpl{
@override def doWhaterverYouWant(db <: UserDatabase) : Unit {
db.getAllUserInfo.foreach(println)
}
}
现在位于私人实施:
class MySQLUserDatabase extends UserDatabase {
@override def getAllUserInfo : List[UserInfo] = mysql.query(...)
...
}
我希望用户能够访问一种类似LocalTextFileUserDatabase
的默认impl来测试他们的代码,这将取代我服务器端的服务器端。
这样做的最佳方式是什么?
感谢您的帮助
答案 0 :(得分:0)
您可以根据当前环境注入不同的具体实现。例如,if SERVER_ENV == "local"
您将创建LocalTextFileUserDatabase
的实例,否则MySQLUserDatabase
。