Scala Language
Afhankelijkheid injectie
Zoeken…
Cakepatroon met innerlijke implementatieklasse.
//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()
}
In het bovenstaande voorbeeld heb ik aangetoond hoe TimeUtil in MainController moet worden geïnjecteerd.
De belangrijkste syntaxis is de _: TimeUtil =>
( _: TimeUtil =>
) die TimeUtil
in MainController
moet injecteren. Met andere woorden, MainController
afhankelijk van TimeUtil
.
Ik gebruik innerlijke klasse (bijv. TimeUtilImpl
) in elke component omdat, naar mijn mening, het gemakkelijker is om te testen omdat we de innerlijke klasse kunnen bespotten. En het is ook eenvoudiger om te traceren waar de methode vandaan komt wanneer het project complexer wordt.
Ten slotte bedraad ik alle componenten samen. Als u bekend bent met Guice, is dit gelijk aan Binding
Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow