[英]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
方法的簽名確認這是意圖)。
也就是說,很多邏輯可以提取到trait
或abstract class
或組件中,以便您可以在其他地方擁有一些通用邏輯,讓它依賴依賴注入,創建多個實現,並將它們連接到單獨的“主干”中,例如生產代碼和端到端測試。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.