수색…


내부 구현 클래스가있는 Cake Pattern.

//create a component that will be injected
trait TimeUtil {
    lazy val timeUtil = new TimeUtilImpl()

    class TimeUtilImpl{
        def now() = new DateTime()
    }
}

//main controller is depended on time util
trait MainController {
    _ : TimeUtil => //inject time util into main controller

    lazy val mainController = new MainControllerImpl()
    
    class MainControllerImpl {
        def printCurrentTime() = println(timeUtil.now()) //timeUtil is injected from TimeUtil trait
    }
}

object MainApp extends App {
    object app extends MainController 
       with TimeUtil //wire all components

    app.mainController.printCurrentTime()
}

위의 예제에서 MainController에 TimeUtil을 주입하는 방법을 보여주었습니다.

가장 중요한 구문은 TimeUtilMainController 에 주입하는 자체 주석 ( _: TimeUtil => )입니다. 다시 TimeUtil , MainControllerTimeUtil 의존합니다.

내 생각에 내부 클래스를 조롱 할 수 있으므로 테스트하기가 쉽기 때문에 각 구성 요소에서 내부 클래스 (예 : TimeUtilImpl )를 사용합니다. 또한 프로젝트가 더욱 복잡해질 때부터 메소드가 호출되는 곳을 추적하는 것이 더 쉽습니다.

마지막으로 모든 구성 요소를 하나로 연결합니다. Guice에 익숙하다면 Binding 과 동일합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow