Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以将视图实现隐藏在Scala应用程序中?_Scala_Swing_Javafx_Model View Controller_Scalafx - Fatal编程技术网

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

是否可以将视图实现隐藏在Scala应用程序中?,scala,swing,javafx,model-view-controller,scalafx,Scala,Swing,Javafx,Model View Controller,Scalafx,我的目标是在模拟应用程序中使用MVC模式,其中控制器知道有一个视图(并使用接口与之交互),但不知道如何实现它: object Controller extends App { View.initView() ... } object View { stage: Stage = ... def initView: Unit = { ... } } 然而,我只是设法让程序的入口点扩展scalafx.application.JFXApp、javafx.applic

我的目标是在模拟应用程序中使用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])
依赖关系可能是:

  • 实例
  • 实例(函数)的配方
  • 配置
等等

您还可以抽象一些方法,并在一些顶层实现它们

通常,您将最终的
应用程序
实现视为带有
main
方法的类-这不是传递依赖项的对象,而是最终将它们连接在一起的地方。因此,最终您必须将其设计为您的
。(
launch
methods的签名确认这是目的)


也就是说,许多逻辑可以被提取到
trait
s或
抽象类或组件中,这样您就可以在其他地方拥有一些通用逻辑,让它依赖依赖于依赖注入,创建几个实现,并将它们连接到单独的“主干”中,例如生产代码和端到端测试,您可以将应用程序设计为抽象的,例如

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

  // code using things
}
然后将实现传递到其他地方

class MyApplicationImplemented 
  extends MyApplication(implementation1, implentation2)

Application.launch(classOf[MyApplicationImplemented])
依赖关系可能是:

  • 实例
  • 实例(函数)的配方
  • 配置
等等

您还可以抽象一些方法,并在一些顶层实现它们

通常,您将最终的
应用程序
实现视为带有
main
方法的类-这不是传递依赖项的对象,而是最终将它们连接在一起的地方。因此,最终您必须将其设计为您的
。(
launch
methods的签名确认这是目的)


也就是说,许多逻辑可以被提取到
trait
s或
抽象类或组件中,这样您就可以在其他地方拥有一些通用逻辑,让它依赖于依赖项注入,创建几个实现,并将它们连接到单独的“主干”中,例如生产代码和端到端测试。

谢谢!我设法在应用程序的底部隐藏了一个ScalaFX实现。谢谢!我设法在应用程序的底部隐藏了ScalaFX实现。