Ich brauche nur ein bisschen Feedback zu einem Problem, das ich lösen möchte ...
Hier ist eine Beschreibung des Problems:
Meine Firma verkauft einige Produkte, für die der Kunde über einen bestimmten Zeitraum bezahlen kann. Die Kunden werden als existierend oder neu klassifiziert. Um den Kunden das Produkt kaufen zu lassen, überprüfen wir die Kreditwürdigkeit und gelegentlich kann ein Kunde aufgefordert werden, eine Kaution zu hinterlegen, die zurückerstattet wird. Einige Kunden haben eine gute Zahlungshistorie bei uns, sodass wir ihnen keinen Anleihebetrag berechnen müssen. Um das Assessment umzusetzen, habe ich eine Lösung wie folgt entworfen:
%Vor%Zwei Klassen sind definiert, die diese Schnittstelle implementieren.
%Vor%Es gibt eine Klasse, die den entsprechenden Prozessor abhängig davon zurückgibt, ob die Kunden eine gute Zahlungshistorie bei uns haben oder nicht.
Außerdem habe ich ein BondCalculator
wie folgt implementiert:
Schnittstelle IRiskEvaluator
ist wie folgt:
Die zwei Klassen, die diese Schnittstelle implementieren, sind wie folgt:
%Vor%und
%Vor%Jetzt wird alles über eine Methode aufgerufen. Der entsprechende Code ist wie folgt:
%Vor% Ist dieser Entwurf in Ordnung oder kann er weiter verbessert werden? Ein Problem, das ich sehe, ist, dass die Kunden mit einer guten Zahlungshistorie keine Anleihe benötigen, ich muss immer noch die Methode CalculateBond
aufrufen und 0
für den Bondwert zurückgeben. Das fühlt sich irgendwie nicht richtig an. Kann das irgendwie verbessert werden? Alle Kommentare / Vorschläge sind willkommen.
Sie könnten eine boolesche BondRequired-Eigenschaft hinzufügen, um die Absicht explizit zu machen, anstatt von Personen zu folgern, dass "eine Bindung von Null nicht viel Sinn ergibt; der Entwickler muss gemeint haben, dass dieses Ergebnis überhaupt keine Bindung darstellt. "
Allerdings stimme ich Magnum zu, dass dies bereits komplizierter ist, als es notwendig erscheint. Daher ist es vielleicht nicht das Beste, dem Typ weitere Mitglieder hinzuzufügen.
Tags und Links c# design-patterns interface