Disons que nous avons une logique commerciale à effectuer dans un cadre MVC après que l'utilisateur soumet un formulaire:
class BusinessLogic:
def sendDataTo3rdPartyApi(self):
# do stuff
def validateResponse(self):
# do stuff
def persistData(self):
# do stuff
def calculateFees(self):
# do stuff
def sendDataToAnotherApi(self):
# do stuff
Les données post-formulaire sont reçues par le contrôleur et transmettent ces données à la couche logique d'entreprise pour le traitement. Toutes ces fonctions sont nécessaires pour traiter les données. Nous reconnaissons que cette classe BusinessLogic fait probablement de nombreuses choses, donc nous résumons les différentes méthodes dans leurs propres cours et les injectez via DI:
class BusinessLogic:
def __init__(self, dataSender, validator, dataPersister, feeCalculator, anotherDataSender):
# assign objects to private properties within class
def doLogic(self):
# utilize the injected classes to perform necessary business logic
Le problème que je vois avec cette approche est que cela supprime les fonctions dans des classes qui effectuent une chose nous laisse toujours avec une classe qui fait trop de choses - c'est juste sous la forme de classes au lieu de fonctions. Nous pouvons essayer de déplacer ces cours de cette classe, mais nous allons simplement envoyer les dépendances dans le contrôleur. Comme notre logique commerciale devient plus complexe, plus nous allons devoir injecter puisque nous créons une classe pour chaque exigence d'entreprise.
Je me sens comme peu importe ce que vous faites, vous aurez toujours besoin d'une classe de Dieu d'une sorte pour organiser les différentes parties ensemble pour l'exécution. Maintenant, je ne suis pas sûr si cela est nécessairement une mauvaise chose, mais je me demande s'il ya une meilleure approche pour refactore une classe de logique d'entreprise comme celle-ci.
Vraisemblablement pas tout ce qui s'appuie sur la logique commerciale, doit avoir ou même besoin d'accéder à toutes les fonctions de cette classe.
Pourquoi ne pas rechercher un point de clivage naturel? Un bon clien serait celui qui réduit la quantité d'utilisateurs nécessitant des moitiés, ou lorsque la mise en œuvre n'a pas besoin de l'autre moitié de la classe pour atteindre son objectif.
Une autre astuce serait de pousser certains de ces détails de mise en œuvre dans des classes logiques spécialisées, puis relier leurs instances via une classe de parapluie.