Frage

Ich lerne, Programmierung und Software-Design und Java jetzt in der Schule. Die Klasse, die ich verwechselt wird immer ist Software Design. Wir sind mit Word einfach VB Code auszuführen einfache Programme zu tun. Mein Lehrer sagt, ich bin Zusammenhalt zu verlieren, indem laufende Summen verwenden. Ich habe eine harte Zeit eine Art und Weise zu denken, sie zu vermeiden. Hier ist ein Beispiel von einigen Pseudo-Code ich spreche (die Module bilden ein Treibermodul aufgerufen werden, die nicht angezeigt wird):

CaluculateDiscountPrice module
    DiscountPrice = (FloorPrice * (1 – DiscountRate))
End module

CalculateDeliveryPrice module
    If DeliveryFee = “Yes” Then
        DeliveryPrice = DiscountPrice + 20  
    ElseIf DeliveryFee = “No” Then
        DeliveryPrice = DiscountPrice
    End If
End module

CalculateTradeInCredit module
    If TradeInCredit = “Yes” Then
        CreditedPrice = DeliveryPrice – 5
    ElseIf TradeInCredit = “No” Then
        CreditedPrice = DeliveryPrice
    End If
End module

CaluculateCostOfBed module
    CostOfBed = CreditedPrice
End module

ist im Grunde DiscountPrice verwendet, um die ersten beiden Module zu verbinden und dann die zweiten zwei DeliveryPrice. Angeblich kann das letzte Modul nicht einmal sein müssen, gibt es ich dieses Problem behoben. Jede Hilfe für den Anfänger?

War es hilfreich?

Lösung

Wenn ich an Ihrem Beispiel sehen, was bei mir springt ein Problem mit Kupplung zwischen den Modulen. (Wenn Sie bereits nicht dieses Konzept untersucht, werden Sie wahrscheinlich bald.) Jedoch zu viel Kupplung und zu wenig Zusammenhalt gehen oft zusammen, so hoffentlich kann ich noch geben Ihnen eine hilfreiche Antwort. (Stark vereinfacht, aber ausreichend for hier Definitionen: Cohesive Module tun fokussiert eine Sache, statt mehrere unabhängige Dinge, und Gekoppelt Module sind voneinander abhängig zu machen, was es ist, dass sie tun, wir in der Regel Module starken Zusammenhalt intern aber schwache Kopplung haben wollen. andere Module.)

Ich schließe aus Ihrem Pseudo-Code, dass Sie den Preis für ein Bett wie so berechnet werden sollen:

* 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

Wenn Sie es so ausdrücken, werden Sie feststellen, dass diese Vorgänge sind (oder sein kann) ziemlich unabhängig voneinander. Zum Beispiel ist die Zustellgebühr nicht wirklich hängt von dem vergünstigten Preis, auf nur, ob eine Zustellgebühr geladen werden soll.

Nun, wie Sie Ihr Design strukturiert haben, Ihre ‚DeliveryPrice‘ Variable ist wirklich ein „wie geliefert“ Preis, den hat sind abhängig von der vergünstigten Preis. Dies ist die Art von Sache, die wir wollen, sie wieder loszuwerden. Wir können sagen, dass Ihre Module sind zu eng miteinander verbunden, weil sie in einer Weise voneinander abhängig sind, die nicht wirklich erforderlich sind, um das Problem zu lösen. Wir können sagen, dass sie den Zusammenhalt fehlt, weil sie wirklich mehr als eine Sache tun - dh der Lieferpreis Modul Hinzufügen der Zustellgebühr zum vergünstigten Preis , anstatt nur Berechnung der Zustellgebühr .

Es ist schwer, mit Spielzeug Beispielen zu sehen, aber diese Dinge als Entwürfe erhalten komplexer. Mit nur wenigen Zeilen von Pseudo-Code, so scheint es ganz natürlich eine „laufende Summe“ zwischen ihnen eingefädelt zu haben. Aber was, wenn die Zustellgebühr auf einer komplexen Berechnung hängt die Entfernung des Kunden Haus, das Gewicht des Kauf beteiligt und den Tag der Woche? Nun hat es auch beinhalten, was die vergünstigten Preis bekommen würde wirklich verwirrend.

Also, mit all dem im Verstand, betrachten diesen alternativen Entwurf:

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                                  

Nun wird Kopplung reduziert - die Lieferung und Trade-in-Module nicht wissen, etwas über Bett Preise. Dies verbessert auch ihre Kohäsion, da sie etwas mehr konzentriert tun - Gebühren zu berechnen, nicht die Preise und Gebühren summieren. Die Isttarifermittlung ist abhängig von den anderen Modulen, aber das ist in dem inhärente Problem. Und die Berechnung ist bindigen - die „eine Sache“ es tut den Preis des Bettes ist die Berechnung

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top