6. Spring pour configurer les applications à trois couches
Nous nous proposons ici d'étudier sur un exemple comment Spring peut être utilisé pour configurer les applications à trois couches. Un exemple courant de ce type d'applications sont les applications web.
6.1. Le problème
On souhaite construire une application 3-tier ayant la structure suivante :
![]() |
- les trois couches seront rendues indépendantes grâce à l'utilisation d'interfaces
- l'intégration des trois couches sera réalisée par Spring
- on créera des paquetages séparés pour chacune des trois couches que l'on appellera [control], [domain] et [dao]. Un paquetage supplémentaire [tests] contiendra les applications de tests.
6.2. La couche d'accès aux données
La couche DAO implémentera l'interface suivante :
Namespace istia.st.spring3tier.dao
Public Interface IDao
' faire qq chose dans la couche [dao]
Function doSomethingInDaoLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- écrire deux classes Dao1Impl1 et Dao1Impl2 implémentant l'interface IDao. La méthode Dao1Impl1. doSomethingInDaoLayer rendra a+b et méthode Dao1Impl2. doSomethingInDaoLayer rendra a-b.
- écrire une classe de test NUnit testant les deux classes précédentes
6.3. La couche métier
La couche métier implémentera l'interface suivante :
Namespace istia.st.spring3tier.domain
Public Interface IDomain
' faire qq chose dans la couche [domain]
Function doSomethingInDomainLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- écrire deux classes Domain1Impl1 et Domain1Impl2 implémentant l'interface IDomain. Ces classes auront un champ privé de type IDao qui pourra être initialisé via une propriété publique. La méthode doSomethingInDomainLayer de la classe [DomainImpl1] incrémentera a et b d'une unité puis passera ces deux paramètres à la méthode doSomethingInDaoLayer de l'objet de type IDao1 reçu. La méthode doSomethingInDomainLayer de la classe [Domain1Impl2elle, décrémentera a et b d'une unité avant de faire la même chose.
- écrire une classe de test NUnit testant les deux classes précédentes
6.4. La couche interface utilisateur
La couche interface utilisateur implémentera l'interface suivante :
Namespace istia.st.spring3tier.control
Public Interface IControl
' faire qq chose dans la couche [control]
Function doSomethingInControlLayer(ByVal a As Integer, ByVal b As Integer) As Integer
End Interface
End Namespace
- écrire deux classes Control1Impl1 et Control1Impl2 implémentant l'interface IContro1. Ces classes auront un champ privé de type IDomain qui pourra être initialisé via une propriété publique. La méthode doSomethingInControlLayer de la classe [Control1Impl1] incrémentera a et b d'une unité puis passera ces deux paramètres à la méthode doSomethingInDomainLayer de l'objet de type IDomain1 reçu. La méthode doSomethingInControlLayer de la classe [Control11Impl2] elle, décrémentera a et b d'une unité avant de faire la même chose.
- écrire une classe de test NUnit testant les deux classes précédentes
6.5. Intégration avec Spring
- écrire un fichier de configuration Spring qui décidera quelles classes chacune des trois couches précédentes devra utiliser
- écrire une classe de test NUnit utilisant différentes configurations Spring, afin de mettre en lumière la flexibilité de l'application écrite
- écrire une application autonome (méthode main) donnant deux paramètres à la méthode [doSomethingInControlLayer] de l'interface IControl implémentée et affichant le résultat rendu par l'interface.
