Logique métier vs couche service

9

J'ai lu cette réponse: https://softwareengineering.stackexchange.com/a/234254/173318 veuillez corriger ma compréhension.

Les règles commerciales se réfèrent à la liste des étapes de l'entreprise dans le monde réel (pas de codes).

La logique métier fait référence au processus de conversion des règles métier en codes et à ces groupes / types de codes appelés «logique métier».

Et à quoi sert la couche de service? si je lis cette réponse, cela ne semble pas différent avec la logique métier https://stackoverflow.com/a/4817935/4190539

La couche de service est-elle un endroit où la logique métier et le référentiel se rencontrent?

Kakashi
la source
1
"couche de service" est un terme générique, il peut être ou contenir ce que vous voulez. Cette question SO que vous avez citée parlait de la "couche de service dans ASP.NET MVC", qui donne au terme une focalisation plus spécifique. Parlez-vous intentionnellement de ce dernier? Ou avez-vous simplement raté la différence?
Doc Brown
c'est ce que j'ai obtenu jusqu'à présent. mais j'aimerais entendre vos explications à leur sujet.
Kakashi

Réponses:

11

"Couche de service" est un terme architectural. Il fait référence à une partie du système qui se situe quelque part au milieu d'une architecture à plusieurs niveaux , sous la couche d'interaction utilisateur mais au-dessus de la couche d'accès aux données.

La logique métier peut être implémentée dans la couche service, appliquant ainsi des règles métier.

Notez cependant qu'il existe des cas où la logique métier se retrouve dans d'autres couches. Par exemple, certaines règles métier sont appliquées dans la couche d'interaction utilisateur afin d'améliorer l'expérience utilisateur (par exemple des validateurs écrits en Javascript pour que vous puissiez les vérifier sans aller-retour vers le serveur). Dans ce cas, la couche de service dupliquera généralement l'application.

D'autres règles métier ne peuvent être appliquées qu'au niveau de la couche de base de données, par exemple en cas de problèmes de concurrence (imaginez une application dans laquelle vous pouvez consulter un livre de bibliothèque) ou de performances (imaginez un programme qui calcule la commission annuelle d'un vendeur occupé, basée sur un structure tarifaire complexe).

John Wu
la source
est-ce bien si j'ai un répertoire de services et contient des classes comme des endroits où je mets la logique commerciale et j'injecte un référentiel, un autre service, une validation là-bas?
Kakashi
Oui, il est naturel d'injecter d'autres services, y compris l'accès aux données, dans une couche de service - il doit en quelque sorte stocker les données, et s'il est correctement écrit, il ne sait pas comment le faire lui-même.
John Wu
le référentiel ne doit contenir aucun code d'entreprise, n'est-ce pas? cela signifie que le référentiel doit être clair de la validation, du filtre ou de toute autre manipulation strijg comme strtolower par exemple?
Kakashi
Pas nécessairement (je vous ai déjà donné deux exemples dans mon article), mais c'est une bonne pratique de déplacer autant de logique métier que possible dans la couche service.
John Wu
oh d'accord, avez-vous un code de modèle de référentiel que je peux voir?
Kakashi