Skip to content

6. Spring voor het configureren van drielaagse applicaties

We willen hier aan de hand van een voorbeeld bekijken hoe Spring kan worden gebruikt om drielaagse applicaties te configureren. Een veelvoorkomend voorbeeld van dit soort applicaties zijn webapplicaties.

6.1. Het probleem

We willen een drielaagse applicatie bouwen met de volgende structuur:

  • de drie lagen worden onafhankelijk gemaakt door het gebruik van interfaces
  • de integratie van de drie lagen wordt verzorgd door Spring
  • voor elk van de drie lagen zullen we afzonderlijke pakketten aanmaken, die we [control], [domain] en [dao] zullen noemen. Een extra pakket, [tests], zal de testapplicaties bevatten.

6.2. De laag voor gegevenstoegang

De laag DAO implementeert de volgende interface:

Namespace istia.st.spring3tier.dao
    Public Interface IDao
         ' iets doen in de laag [dao]
        Function doSomethingInDaoLayer(ByVal a As Integer, ByVal b As Integer) As Integer
    End Interface
End Namespace
  • Schrijf twee klassen, Dao1Impl1 en Dao1Impl2, die de interface IDao implementeren. De methode Dao1Impl1. doSomethingInDaoLayer levert a+b op en de methode Dao1Impl2. doSomethingInDaoLayer levert a-b op.
  • Schrijf een testklasse NUnit die de twee voorgaande klassen test

6.3. De bedrijfslaag

De bedrijfslaag implementeert de volgende interface:

Namespace istia.st.spring3tier.domain
    Public Interface IDomain
         ' iets doen in de laag [domain]
        Function doSomethingInDomainLayer(ByVal a As Integer, ByVal b As Integer) As Integer
    End Interface
End Namespace
  • Schrijf twee klassen, Domain1Impl1 en Domain1Impl2, die de interface IDomain implementeren. Deze klassen zullen een privéveld van het type IDao hebben dat via een openbare eigenschap kan worden geïnitialiseerd. De methode doSomethingInDomainLayer van de klasse [DomainImpl1] verhoogt a en b met één en geeft deze twee parameters vervolgens door aan de methode doSomethingInDaoLayer van het ontvangen object van het type IDao1. De methode doSomethingInDomainLayer van de klasse [Domain1Impl2elle] zal a en b met één eenheid verlagen alvorens hetzelfde te doen.
  • Schrijf een testklasse NUnit die de twee voorgaande klassen test

6.4. De gebruikersinterface-laag

De gebruikersinterface-laag implementeert de volgende interface:

Namespace istia.st.spring3tier.control
    Public Interface IControl
         ' iets doen in de laag [control]
        Function doSomethingInControlLayer(ByVal a As Integer, ByVal b As Integer) As Integer
    End Interface
End Namespace
  • Schrijf twee klassen, Control1Impl1 en Control1Impl2, die de interface IContro1 implementeren. Deze klassen hebben een privéveld van het type IDomain dat via een openbare eigenschap kan worden geïnitialiseerd. De methode doSomethingInControlLayer van de klasse [Control1Impl1] verhoogt a en b met één en geeft deze twee parameters vervolgens door aan de methode doSomethingInDomainLayer van het ontvangen object van het type IDomain1. De methode doSomethingInControlLayer van de klasse [Control11Impl2] daarentegen zal a en b met één eenheid verlagen alvorens hetzelfde te doen.
  • Schrijf een testklasse NUnit om de twee voorgaande klassen te testen

6.5. Integratie met Spring

  • Schrijf een Spring-configuratiebestand dat bepaalt welke klassen elk van de drie voorgaande lagen moet gebruiken
  • Schrijf een testklasse NUnit die verschillende Spring-configuraties gebruikt, om de flexibiliteit van de geschreven applicatie te benadrukken
  • Schrijf een zelfstandige applicatie (main-methode) die twee parameters doorgeeft aan de methode [doSomethingInControlLayer] van de geïmplementeerde interface IControl en het door de interface weergegeven resultaat weergeeft.