J'ai entendu beaucoup de gens parler de la logique métier au travail et en ligne, et j'ai lu plusieurs questions sur ce site à ce sujet, mais le terme n'a toujours pas beaucoup de sens pour moi. Par exemple, voici quelques déclarations (paraphrasées) que je vois souvent:
"La logique métier est la partie de votre programme qui code les règles métier réelles." La plupart des définitions que j'ai lues sont circulaires comme celle-ci.
"La logique métier est tout ce qui est unique à votre application particulière." Je ne vois pas en quoi cela est différent de "votre application particulière n'est rien d'autre que la logique métier", à moins que nous n'ayons accidentellement réinventé un tas de roues pour lesquelles nous aurions pu utiliser un logiciel tiers existant. D'où le titre de la question.
"Il devrait y avoir une couche de logique métier au-dessus de votre couche d'accès aux données et en dessous de votre couche GUI." Dans le code que j'écris, les accesseurs de la base de données doivent savoir à quelles données ils sont censés accéder, et le code de l'interface utilisateur doit en savoir beaucoup sur ce qu'il affiche afin de l'afficher correctement, et il n'y a rien à vraiment faire entre les deux. ces deux endroits autres que le transfert de taches de données entre le client et le serveur. Alors, qu'est-ce qui est censé entrer dans une couche de logique métier?
"La logique métier doit être distincte de la logique de présentation." La plupart des demandes de fonctionnalités que nous recevons visent à modifier la logique de présentation pour des raisons commerciales. Si l'une des règles commerciales consiste à afficher les prix des obligations du gouvernement américain en notation 32nds par défaut (tout en fournissant également une interface utilisateur pour que l'utilisateur puisse le configurer), la logique de présentation doit au moins savoir que cette règle existe, sinon la mettre en œuvre complètement. En outre, il semble qu'une partie importante de la conception UX aide l'utilisateur à comprendre les règles métier que notre logiciel essaie de mettre en œuvre.
Est-il possible que je sois réellement dans une équipe qui ne fait que de la logique métier, et que toute la logique non commerciale soit faite par d'autres équipes? Ou est-ce que tout le concept de "logique métier" en tant qu'entité distincte ne fonctionne que pour certaines applications ou architectures?
Pour aider à concrétiser les réponses: Imaginez que vous devez réimplémenter l'application Domino's Pizza. Quelle est la logique métier et quelle est la logique non commerciale de cette application? Et comment serait-il possible de placer cette logique commerciale de commande de pizza dans sa propre "couche" de code, sans que la plupart des informations sur la pizza ne se retrouvent dans les couches d'accès aux données et de présentation?
Mise à jour: Je suis arrivé à la conclusion que mon équipe utilise probablement 90% de code d'interface utilisateur et la plupart - mais pas la totalité - de ce que vous appelleriez la logique métier provient d'autres équipes ou entreprises. Fondamentalement, notre application est pour la surveillance des données financières, et presque toutes les fonctionnalités sont des moyens pour l'utilisateur de personnaliser les données qu'il voit et comment il les voient. . Il n'y a pas d'achat ou de vente en cours (bien que nous nous intégrions un peu aux autres applications de notre entreprise qui le font), et les données réelles sont fournies par de nombreuses sources externes. Mais nous permettons aux utilisateurs de faire des choses comme envoyer des copies de leurs "moniteurs" à d'autres utilisateurs, donc les détails de la façon dont nous traitons cela peuvent probablement être considérés comme de la logique métier. Il existe en fait une application mobile qui parle actuellement à certains de notre code backend, et je sais exactement quelle partie de notre code frontend je voudrais qu'elle partage avec notre interface utilisateur dans un monde idéal (essentiellement le M dans notre quasi-MVC), donc Je suppose que c'est le BLL pour nous.
J'accepte la réponse de user61852 car elle m'a donné une compréhension beaucoup plus concrète de ce que la "logique métier" fait et ne fait pas référence.
Je vais vous donner quelques conseils concernant les applications CRUD , car je n'ai pas beaucoup d'expérience dans les jeux ou les applications graphiques intensives:
Il semble que la plupart de votre travail se trouve dans la couche d'interface utilisateur. La modification du format d'affichage pour des raisons professionnelles n'implique aucune logique métier. Le changement est un changement de la logique de vue.
La possibilité de modifier le format implique une certaine logique métier pouvant impliquer la persistance de la préférence.
La persistance du format dans un cookie peut également être implémentée dans la couche d'affichage.
Cependant, cela pourrait être implémenté de manière MVC. (Certains modèles implémentent la vue comme son propre MVC capable de gérer les préférences.)
Faire une estimation éclairée de votre application.
La logique métier gère des choses comme:
Si cela est fait correctement, il devrait être possible de fournir plusieurs composants de vue sans changer le modèle ou la logique métier. Par exemple, si la conception actuelle est un site Web, un nouveau serveur d'affichage pour un iPhone ou une application Android utiliserait le modèle et la logique métier existants. Ceux-ci peuvent introduire de nouvelles fonctionnalités métier pour fournir des notifications Push. lorsqu'une commande est exécutée, ce qui peut nécessiter des modifications sur plusieurs couches.
Cette ventilation permet de séparer les préoccupations.