2016-08-09 20 views
0

Gibt es eine Standardpraxis oder Konvention darüber, wo Methoden deklariert werden sollen, die nur innerhalb einer anderen Methode verwendet (oder genannt) werden? Um dies zu demonstrieren gelten folgende Voraussetzungen:Best Practice zum Organisieren von Methoden?

public class MyClass{ 
    methodA(); 
    methodB(); 
    methodC(); 

    public void methodA(){ 
     methodA1(); 
     methodA2(); 
    } 
    public void methodB(){ 
     methodB1(); 
     methodB2(); 
    } 
    private void methodA1(){ 
     do something; 
    } 
    private void methodA2(){ 
     do something; 
    } 
} 

Oder gibt es eine andere Art von codding, die die Lesbarkeit der oben verbessern könnte? Ich habe andere Fragen mit ähnlichen Themen gelesen, aber sie befassen sich nicht mit meiner Frage, die spezifisch für Mothods ist, die in anderen Methoden verwendet werden. Sie können davon ausgehen, dass Methode A, Methode B und Methode C für eine bestimmte Aufgabe eine logische und sinnvolle Sequenz haben. Mein Problem ist, dass die anderen Methoden (methodA1, methodA2, ..) in dieser Aufgabe keinen Sinn ergeben, sie geben nur innerhalb der Methoden Sinn, die sie genannt werden. Oder sollte ich mich nicht darum kümmern, wo überhaupt Methodendeklarationen platziert werden?

+0

Proxy-Muster? https://en.wikipedia.org/wiki/Proxy_pattern – Stefan

+1

öffentliche Methoden zuerst, dann geschützt, dann privat. macht es ein bisschen leichter zu lesen. – pecks

+0

In einer neueren Studie zum Programmverständnis haben die Ergebnisse gezeigt, dass die Antwort wahrscheinlich lautet: Jede konsistente Reihenfolge. – Elazar

Antwort

1

Methoden sollten so bestellt werden, so dass sie wie eine Geschichte lesen, die nicht der Leser nicht dazu führen, um den Code zu viel

Robert C Martin (aka Onkel springen zu müssen Bob)

Was dies (kurz gesagt) bedeutet, ist, dass Ihre MethodeA1, MethodeA2 nach MethodeA (die sie verwendet) platziert werden soll. Das Gleiche gilt für methodB methodB1, methodB2. Ich würde erwarten, so etwas zu sehen:

public class MyClass{ 
methodA(); 
methodB(); 
methodC(); 

public void methodA(){ 
    methodA1(); 
    methodA2(); 
} 

private void methodA1(){ 
    do something; 
} 
private void methodA2(){ 
    do something; 
} 

public void methodB(){ 
    methodB1(); 
    methodB2(); 
} 

public void methodB1(){ 

} 

public void methodB2(){ 

} 
} 

Es ist auch vorgeschlagen, dass Sie Ihre Mitgliedsvariablen an der Spitze setzen (also nicht die Platzierung Entscheidungsfindung auf der Grundlage der Zugriffsmodifikatoren).

Vielleicht möchten Sie Onkel Bobs books oder videos überprüfen, um einige wirklich gute Tipps zum Schreiben von sauberem Code zu bekommen.

+0

Sie haben methodA1 & methodA2 nach methodA nicht vorher platziert. – Addis

+0

Sorry @Addis Tippfehler. Ich habe meine Antwort bearbeitet. MethodA1 und methodA2 sollten nach MethodeA (die sie verwendet) platziert werden – sestus

0

Wenn Sie nur einen Texteditor verwenden, um Ihren Code zu lesen und zu ändern, dann könnte es sinnvoll sein, über die Reihenfolge nachzudenken, in der Sie Ihre Methoden deklarieren. Normalerweise verwenden Sie jedoch ein modernes Tool wie Eclipse gibt Ihnen einen Überblick über die Methoden und ermöglicht es Ihnen, der Aufrufhierarchie zu folgen. Daher ist es nicht wichtig, wo sie sich befinden.

Es ist besser, sich darauf zu konzentrieren, Ihren Code so unabhängig und abstrakt wie möglich zu machen, mit Methoden, die nur eine Sache machen, und Klassen, die eine klare Funktion haben und um jeden Preis mit Arbeit zu füllen von einem anderen Objekt gemacht werden.

Oh, und schreiben Sie gute Kommentare. Das bedeutet, erklären warum und nicht was Sie tun.

0

Wenn nur eine Funktion eine Methode aufruft und sie nur einmal aufruft, können Sie nur eine einzige Funktion verwenden.

Wenn es mehrmals aufgerufen wird, platzieren Sie es direkt vor der "Eltern" -Funktion, ohne dazwischen Zeilenumbrüche. Wenn die Lesbarkeit beeinträchtigt wird prüfen, versteckt sich alle unter privat mit einem util_/internaluse_//zzz Präfix oder parentname_ wie methodA_methodA1

(zB die javadocs erhält mit tausend nutzlosen Funktionen verkorkst) Wenn es durch mehr aufgerufen wird Funktionen ist es eher eine Nutzenfunktion. Behandle es also als solches. Mehrere dieser Dienstprogrammfunktionen könnten zu einer Dienstprogrammklasse werden.

Auch persönlich benutze ich C++ Stil. so Mitglieder, dann A1, A2, A, B1, B2, B.