繁体   English   中英

是否可以将视图实现隐藏在 Scala 应用程序中?

[英]Is it possible to have the view implementation hidden in a Scala application?

我的目标是在模拟应用程序中使用 MVC 模式,其中控制器知道有一个视图(并使用接口与其交互)但不知道它是如何实现的:

object Controller extends App {
  View.initView()
  ...
}

object View {
  stage: Stage = ...
  
  def initView: Unit = {
    ...
  }
}

但是,我只能通过程序的入口点来扩展 scalafx.application.JFXApp、javafx.application.Application(下面的示例)或 swing.SimpleSwingApplication,这迫使控制器知道视图是如何实现的。 有什么简单的解决方法吗?

def main(args: Array[String]): Unit = {
  Application.launch(classOf[SimulatorApp])
}

class SimulatorApp extends Application {
  override def start(stage: Stage): Unit = {
    View.initView(stage)
  }
}

好吧,您可以将应用程序设计为抽象的,例如

class MyApplication(dependency1: Dependency1, dependency2: Dependency2)
  extends Application {

  // code using things
}

然后在其他地方传递实现

class MyApplicationImplemented 
  extends MyApplication(implementation1, implentation2)

Application.launch(classOf[MyApplicationImplemented])

依赖关系可能是:

  • 实例
  • 实例的配方(功能)
  • 配置

等等。

您还可以将某些方法抽象化并在某些顶层实现它们。

通常,您将最终的Application实现视为具有main方法的类 - 这不是您将依赖项传递到的对象,而是您最终将它们连接在一起的地方。 所以最后你必须把它设计成你的main . launch方法的签名确认这是意图)。

也就是说,很多逻辑可以提取到traitabstract class或组件中,以便您可以在其他地方拥有一些通用逻辑,让它依赖依赖注入,创建多个实现,并将它们连接到单独的“主干”中,例如生产代码和端到端测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM