@meziantou : on dirait que tu as fusionné ta DAL et ta BLL (corrige-moi si je me trompe). Attention, ADO.NET n'est pas une couche en soit, c'est juste une API
Je prends un exemple, mais il y en a plein dans le code que tu as posté :
Dans la méthode Load, tu manipules des paramètres SQL. Cela devrait être fait dans la DAL et non dans la BLL. Ta BLL devrait manipuler un DTO, puis l'envoyer à la DAL. Ensuite la DAL alimente les paramètres SQL à partir du DTO.
C'est ce qui me fait dire que tu as fusionné les deux couches.
En général dans mes projets, je m'interdis certaines choses, comme par exemple le fait que telle couche ne doive pas référencer tel assembly. Par exemple la BLL ne doit pas référencer System.Data.SqlClient.dll. Pourquoi ? Parce que c'est le rôle de la DAL de l'utiliser, donc seule la DAL a le droit de le référencer. L'intérêt du DTO c'est de faire transiter les données d'une couche à l'autre, indépendament des traitements. La DAL va le "remplir" de données. Ensuite la BLL le récupère et elle va lui appliquer les règles métier ainsi que de la validation. Puis elle transmet le DTO à l'UI qui va gérer l'affichage.
Bien sûr, ça c'est si on veut rester proche de l'architecture multi-couches. Ca peut paraître un peu rigoureux. Sur un projet "simple", l'intérêt de la séparation des couches n'est pas forcément flagrant. Par contre dès que le projet se complexifie (beaucoup d'objets, plutôt complexes, avec de l'héritage/abstraction dans tous les sens, etc.) on le mesure nettement : le code est beaucoup plus clair.
Partager