簡體   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