Bonjour,

j'ai développé une appli depuis quelques temps où j'ai organisé la code de la manière suivante.

Contrôleur : validation, renvoi de vues
Service : déléagation de la logique métier à laquelle j'ai mis des instances de modèles en paramètres de constructeur
Modèle : couche d'accès aux données uniquement, et renvoi de la requête SQL.

Maintenant, à revoir l'intégralité du projet; je me rend compte des choix pour le moins discutables que j'ai fait :
- Pourquoi ne pas permettre au besoin d'appeler la BDD dans le contrôleur s'il n'y a aucune logique métier derrière ? Ex : Order.all() pour récupérer toutes les commandes d'un client. Inutile d'abstraire ça dans un service s'il s'agit juste de faire ça
- Pourquoi appeler un Service 'Service' pour stocker sa logique métier ? Cela aurait du sens si une application expose à d'autres appli, mais pas pour stocker de la logique métier. L'appel d'un service web peut être considéré comme un service, tout comme du code qui se connecte à des API externe, type Google etc... car ce sont des services en tant que tel.

Seulement voilà, la validation de modèle est énormément liée au contexte dans lequel elle est faite et donc il n'esiste pas forcément une seule règle pour un champ en base. Comment régler ses problèmes proprement quand le code grandit ?

J'ai déjà une réponse partielle :
- organiser son code de manière fonctionnelle, c'est les fonctionnalités qui doivent déterminer la structure du code et non l'IHM. Par ex : l'enregistrement de l'utilisateur (inscription), login, affichage de commandes etc,
- qu'une vue ne réponde qu'a un seul cas d'utilisation. Par exemple, pour le cas de commandes, avoir des vues différentes pour : un utilisateur qui n'a pas du tout passé de commande, et une autre quand il en a plusieurs, une vue différente pour une interface d’administration utilisée en interne
- le nommage de méthode, j'ai eu du code avec des méthodes de ce type : updateMachin(), updateTruc(), comment les éviter ? Utiliser une interface avec juste une méthode update() ou du CRUD type new, update, delete ? N'est-ce pas inutile de se forcer à utiliser toutes ces méthodes pour des objets où l'on ne veut que faire des MAJ par ex ?

Autres questions en vrac :
- que signifie le paramètre générique <T> que l'on peut voir dans les listes par ex ?
- quand j'utilise DbContext, qu'est-ce que je manipule exactement ?

Par ex :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
using (var context = new BloggingContext())
{
    var blogs = context.Blogs.ToList();
}
la variable context est quoi exactement ? Une connexion à la BDD ? Liée à quelle table ?

Je comprends ce que cela fait mais j'aime comprendre les données que je manipule.

De bonnes pratiques à partager ?