Quand je regarde votre exemple, ce qui me saute aux yeux est un problème avec couplant entre les modules. (Si vous n'avez pas déjà étudié ce concept, vous le ferez probablement bientôt.) Cependant, trop de couplage et trop peu de cohésion vont souvent de pair, donc j'espère que je peux encore vous donner une réponse utile. (Des définitions sursimplifiées mais adéquates pour: Les modules cohésifs font une chose focalisée au lieu de plusieurs choses sans rapport, et les modules couplés dépendent les uns des autres pour faire ce qu'ils font: nous voulons généralement que les modules aient une forte cohésion interne d'autres modules)
Je déduis de votre pseudo que vous voulez calculer le prix d'un lit comme ceci:.
* start with the floor price
* discount it
* add in a delivery fee
* subtract a trade-in credit
* the result is the cost of the bed
Lorsque vous exprimez comme ça, vous remarquerez peut-être que ces opérations sont (ou peuvent être) assez indépendants les uns des autres. Par exemple, les frais de livraison ne dépendent pas vraiment du prix réduit, seulement si des frais de livraison doivent être facturés.
Maintenant, la façon dont vous avez structuré votre design, votre variable «DeliveryPrice» est vraiment un prix «tel que livré» que ne dépendent du prix réduit. C'est le genre de chose dont nous voulons nous débarrasser. Nous pouvons dire que vos modules sont trop étroitement couplés parce qu'ils dépendent les uns des autres d'une manière qui n'est pas vraiment nécessaire pour résoudre le problème. Nous pouvons dire qu'ils manquent de cohésion parce qu'ils font vraiment plus d'une chose - c'est-à-dire le module de prix de livraison est ajoutant les frais de livraison au prix réduit au lieu de seulement calculant les frais de livraison.
Il est difficile de voir avec des exemples de jouets, mais cela est d'autant plus important que les dessins deviennent plus complexes. Avec juste quelques lignes de pseudocode, il semble parfaitement naturel d'avoir un "running running" entre eux. Mais que faire si les frais de livraison dépendent d'un calcul complexe impliquant la distance à la maison du client, le poids de l'achat, et le jour de la semaine? Maintenant, ayant également impliquer tout ce que le prix réduit serait vraiment déroutant.
Donc, avec tout cela à l'esprit, considérer cette autre conception:
CalculateDeliveryFee module
If DeliveryFeeCharged = “Yes” Then
DeliveryFee = 20
End If
End module
CalculateTradeInCredit module
If TradeInCreditApplied = “Yes” Then
TradeInCredit = 5
End If
End module
CaluculateCostOfBed module
DiscountPrice = (FloorPrice * (1 – DiscountRate))
AsDeliveredPrice = DiscountPrice + DeliveryFee
WithTradeInPrice = AsDeliveredPrice - TradeInCredit
CostOfBed = WithTradeInPrice
End module
Maintenant, le couplage est réduite - la fourniture et les modules commerciaux en ne savent pas quoi que ce soit sur les prix des lits. Cela améliore également leur cohésion, car ils font quelque chose de plus ciblé - calcul des frais, pas de sommation des prix et des frais. Le calcul du prix réel dépend des autres modules, mais c'est inhérent au problème. Et le calcul est cohérent - la "seule chose" qu'il fait est de calculer le prix du lit!
J'ai ajouté un tag agnostique au langage parce que vous mentionnez Java, donc je pense que vous souhaitez une solution générale au problème, pas seulement VBA. – Fionnuala
+1 pour poser une question de débutant réfléchie – jtolle