我使用的喷雾,有一个基本路线特点,它定义了一些应该实现的功能...喷雾:在性状重写功能
trait ServiceBaseRoute extends HttpService {
def function1():Type
def function2():Type
lazy val serviceBaseRoute = ...
然后我MIXIN这种特质对其他一些性状...
trait MyRoute1 extends HttpService
with ServiceBaseRoute {
override def function1():Type = {...}
override def function2():Type = {...}
val myRoute1 = serviceBaseRoute
和...
trait MyRoute2 extends HttpService
with ServiceBaseRoute {
override def function1():Type = {...}
override def function2():Type = {...}
val myRoute2 = serviceBaseRoute
最后我作为构建遵循的路线的顶层小号...
trait V1Routes extends HttpService
with MyRoute1
with MyRoute2 {
val v1Routes =
pathPrefix("v1") {
authenticate(...) {
myRoute1 ~ myRoute2
}
}
编译罚款等......然而,当我运行这个MyRoute2的功能覆盖覆盖在MyRoute1定义。我在想这是因为我没有MyRoute1和MyRoute2的实际实例,因为它们被简单地混合在一起,并且自MyRoute2之后的MyRoute2的值覆盖了MyRoute1的值之后呢? 那么实现这种保存每个特征中定义的覆盖的最佳方式是什么? 我是否需要将MyRoute1和MyRoute2定义为对象?
感谢
'serviceBaseRoute'似乎并没有得到任何地方使用?它是否在'myRoute1'和'myRoute2'中使用? – mattinbits
对不起!我已经编辑它以显示它在哪里使用... val myRoute1 = serviceBaseRoute ...实质上,两条路线都包含类似的逻辑,但函数覆盖定义每条路线不同的位置,服务基线路线调用这些覆盖的函数。 – fatlog
我越是想到这一点,我越是意识到它只是设计得非常糟糕。当然,这些功能在混合它们作为特征时会被覆盖... – fatlog