我一直在使用一些Play Framework应用程序,这些应用程序通常定义嵌套在traits中的类。这是一个人为的简单例子。
trait UsefulServiceComponent {
val usefulService: UsefulService
class UsefulService {
def doSomething(thing: Thing): OtherThing = {
// etc.
}
}
}
import services.UsefulServiceComponent
object TheController extends Controller with UsefulServiceComponent {
val usefulService = new UsefulService
def findOtherThing(id: Long) = {
val thing = ??? // Get it from somewhere
usefulService.doSomething(thing)
}
// etc.
}
这种模式是否常见?在UsefulService
内嵌套UsefulServiceComponent
会获得什么价值?
答案 0 :(得分:0)
作用域。您也可以装饰/外观/调整服务
答案 1 :(得分:0)
这称为“蛋糕模式”,是一种在Scala中进行依赖注入的方法。我不想复制现有的解释,并且它们太大而无法在任何情况下快速回答,因此这里有一些链接:http://jonasboner.com/real-world-scala-dependency-injection-di/,http://www.warski.org/blog/2010/12/di-in-scala-cake-pattern/,http://www.warski.org/blog/2014/02/using-scala-traits-as-modules-or-the-thin-cake-pattern/(搜索Google或者名称的SO会给你更多。)