2016-04-21 6 views
0

Ich denke, die Frage gilt für jede OO-Sprache. Nach Software-Design-Richtlinien (1), Felder (= Variablen hier), was bei dem Verfahren Parameterliste kommt zusammen, lassen Sie esMethode paratemers Refactoring in Software-Design

String bikeName; 
Wheel wheel1; 
Wheel wheel2; 

in den Losen Methoden zusammen verwendet zum Beispiel sein, zum Beispiel

firstMethod(String bikeName, Wheel wheel1, Wheel wheel2) ... 
secondMethod(String bikeName, Wheel wheel1, Wheel wheel2) ... 

nach Softwaredesign, ist besser, den Code Refactoring der Klasse Bike mit diesen Feldern zu haben, und Methoden:

firstMethod(Bike bike) 
secondMethod(Bike bike) 

Dieser Vorgang ist t rivial und kann sogar automatisiert zu jedem Code durch eine Ein-Klick-Klick-Refactoring-Funktion durchgeführt werden.

Betrachten wir den Fall, hat firstMethod in seinem Körper folgende:

firstMethod(Bike bike){ 

Wheel rwheel = bike.getRearWheel(); 
int somePower = rwheel.getPower(); //whatever 

secondMethod(bike); 
} 


secondMethod(Bike bike){ 
... 
Wheel rwheel = bike.getRearWheel(); 
// or even: 
int somePower = rwheel.getPower(); //whatever 


} 

Aber im secondMethod, die bike.getRearWheel() oder weitere rwheel.getSpeed ​​() ist genannt wieder. Um die gleichen Methoden nicht nennt zweimal zu tun (auch eine Software-Design-Richtlinie), könnte man ein Verfahren zum

secondMethod(Bike bike, int someSpeed)... 

ändern Aber dies kann lästig werden, vor allem im realen Fall mit den Variablen verloren und ist gegen die Richtlinie (1). Welche Variabilität würden Sie in der Praxis wählen?

Antwort

0

Richtlinien sind keine Lösungen und können nicht jede Situation abdecken. Meine (streng persönlich) Empfehlung ist es, zu versuchen, wie folgt:

firstMethod(Bike bike){ 
    ... // other stuff 
    int somePower = bike.getRearWheek().getPower(); 
    ... 
    secondMethod(bike, somePower); 
    ... 
} 

Dann definieren:

secondMethod(Bike bike){ 
    secondMethod(bike, -1); 
} 

secondMethod(Bike bike, int knownPower){ 
    ... 
    int somePower = (knownPower < 0)? bike.getRearWheel().getPower() : knownPower; 
    ... 
} 

Oder in diese Richtung, sowieso.

+0

Hallo, Achim)) danke, aber Entschuldigung, Sie haben die Frage nicht vollständig verstanden. Wie ich Sayd, von cource weiß ich über Defalut-Werte-Ansatz. Einer der Punkte ** HIER ** ist, Sie haben hier vielleicht keinen Anruf 'secondMethod (Fahrrad, int bekannte Power)' wo bekannt, Power in einer ** unabhängigen ** Variable (von Bike), weil dann, ein Benutzer oder sogar ein Code-Ersteller)) konnte (irrtümlich) aufrufen (anyBike, anyValue), und dies würde falsch laufen, weil _value_ nicht auf 'bike.getRearWheel(). getPower()' bezogen ist. Das Design von Software muss solche Fehler ebenfalls verhindern. –

+0

Ich habe nur die Frage beantwortet, was ich in dieser Situation tun würde. Das wurde gefragt. Am Ende können Programmierrichtlinien nur so viel erreichen. Sie können eine falsche Verwendung nicht vorhersagen oder verhindern. Der Benutzer einer Methode muss sicherstellen, dass er weiß, was er tut. –