Comment mettre en œuvre les exigences métier dans le développement de logiciels
Incrémentez votre application de commerce électronique pour vous assurer qu'elle implémente correctement les règles de processus métier requises.
Dans mes articles précédents de cette série, j’ai expliqué pourquoi s’attaquer aux problèmes de codage d’un seul coup, comme s’il s’agissait de hordes de zombies, est une erreur. J'utilise un acronyme utile pour expliquer pourquoi il est préférable d'aborder les problèmes de manière progressive. ZOMBIES signifie :
Z – Zéro
O – Un
M – Plusieurs (ou plus complexes)
B – Comportements limites
I – Définition de l'interface
E – Exercer un comportement exceptionnel
S – Scénarios simples, solutions simples
Dans les trois premiers articles de cette série, j'ai démontré les cinq premiers principes des ZOMBIES. Le premier article implémentait Zero, qui fournit le chemin le plus simple possible à travers votre code. Le deuxième article a effectué des tests avec One et Plusieurs échantillons, et le troisième article a examiné les Blimites et I. >interfaces. Dans cet article, je vais examiner l'avant-dernière lettre de notre acronyme : E, qui signifie « exercer un comportement exceptionnel ».
Comportement exceptionnel en action
Lorsque vous écrivez une application comme l'outil de commerce électronique dans cet exemple, vous devez contacter les propriétaires de produits ou les sponsors commerciaux pour savoir si des règles de politique commerciale spécifiques doivent être mises en œuvre.
Effectivement, comme pour toute opération de commerce électronique, vous souhaitez mettre en place des règles de politique commerciale pour inciter les clients à continuer d’acheter. Supposons qu'une règle de politique commerciale ait été communiquée selon laquelle toute commande dont le total général est supérieur à 500 $bénéficie d'un pourcentage de remise.
OK, il est temps de retrousser vos manches et de créer l'attente exécutable pour cette règle de politique commerciale :
[Fact]
public void Add2ItemsTotal600GrandTotal540() {
var expectedGrandTotal = 540.00;
var actualGrandTotal = 0.00;
Assert.Equal(expectedGrandTotal, actualGrandTotal);
}
L'exemple de confirmation qui code la règle de politique commerciale indique que si le total de la commande est de 600,00 $, shoppingAPI
calculera le total général pour le réduire à 540,00 $. Le script ci-dessus simule l'attente juste pour le voir échouer. Maintenant, faites-le passer :
[Fact]
public void Add2ItemsTotal600GrandTotal540() {
var expectedGrandTotal = 540.00;
Hashtable item = new Hashtable();
item.Add("00000001", 200.00);
shoppingAPI.AddItem(item);
Hashtable item2 = new Hashtable();
item2.Add("00000002", 400.00);
shoppingAPI.AddItem(item2);
var actualGrandTotal = shoppingAPI.CalculateGrandTotal();
Assert.Equal(expectedGrandTotal, actualGrandTotal);
}
Dans l'exemple de confirmation, vous ajoutez un article au prix de 200 $et un autre article au prix de 400 $pour un total de 600 $pour la commande. Lorsque vous appelez la méthode CalculateGrandTotal()
, vous vous attendez à obtenir un total de 540 $.
Ce microtest réussira-t-il ?
[xUnit.net 00:00:00.57] tests.UnitTest1.Add2ItemsTotal600GrandTotal540 [FAIL]
X tests.UnitTest1.Add2ItemsTotal600GrandTotal540 [2ms]
Error Message:
Assert.Equal() Failure
Expected: 540
Actual: 600
[...]
Eh bien, cela échoue lamentablement. Vous vous attendiez à 540 $, mais le système calcule 600 $. Pourquoi l'erreur ? C'est parce que vous n'avez pas appris au système comment calculer la remise sur les commandes totales supérieures à 500 $, puis soustraire cette remise du total général.
Implémentez cette logique de traitement. À en juger par l'exemple de confirmation ci-dessus, lorsque le total de la commande est de 600,00 $(ce qui est supérieur au seuil de règle métier d'une commande totalisant 500 $), le total général attendu est de 540 $. Cela signifie que le système doit soustraire 60 $du total général. Et 60 $représentent précisément 10 % de 600 $. Ainsi, la règle de politique commerciale qui traite des remises prévoit une remise de 10 % sur toutes les commandes supérieures à 500 $.
Implémentez cette logique de traitement dans la classe ShippingAPI
:
private double Calculate10PercentDiscount(double total) {
double discount = 0.00;
if(total > 500.00) {
discount = (total/100) * 10;
}
return discount;
}
Tout d’abord, vérifiez si le total de la commande est supérieur à 500 $. Si tel est le cas, calculez 10 % du total de la commande.
Vous devez également apprendre au système comment soustraire les 10 % calculés du total général de la commande. C'est un changement très simple :
return grandTotal - Calculate10PercentDiscount(grandTotal);
Désormais, tous les tests réussissent et vous bénéficiez à nouveau d'un succès constant. Votre script Exerce un comportement exceptionnel pour mettre en œuvre les règles de politique commerciale requises.
Encore un à faire
Je nous ai emmenés à ZOMBIE maintenant, il ne reste donc plus que S. J'en parlerai dans la finale passionnante de la série.