Sicherung der Eingabe von privaten / geschützten Methoden?

8

Normalerweise versuchen alle vernünftigen Entwickler, die Eingabe aller öffentlichen Methoden zu sichern (Casting auf die richtigen Typen, Validieren, Desinfizieren usw.)

Meine Frage ist: Sind Sie in Ihrem Code und validieren auch Parameter, die an geschützte / private Methoden übergeben werden? Meiner Meinung nach ist es nicht notwendig, wenn Sie Parameter von öffentlichen Methoden korrekt sichern und Werte von außen zurückgeben (andere Klassen, db, Benutzereingaben usw.).

Aber ich stehe ständig vor Frameworks und Anwendungen (dh Prestashop, um einen zu nennen), wo die Validierung häufig im Methodenaufruf, im Methodenkörper und erneut für den gesicherten zurückgegebenen Wert wiederholt wird - was, denke ich, Performace Overhead erzeugt und ist auch ein Zeichen für schlechtes Design.

    
ts. 17.05.2010, 15:03
quelle

5 Antworten

2

Wenn Sie der Meinung folgen, dass öffentliche APIs Implementierungen haben sollten, die sich gegen schlechte Parameter wehren, sollte Ihr Kriterium nicht die Sichtbarkeit der Methoden sein, sondern ob der Benutzer der API diese Methode (oder indirekt) direkt aufrufen wird nenne es durch einen anderen, der die Validierung verschiebt).

Beispiele für Methoden, die eine Validierung durchführen sollten:

%Vor%     
Artefacto 17.05.2010, 15:11
quelle
3

Für protected sollten Sie diese validieren, da die Methode später überschrieben oder von einer anderen Klasse aufgerufen werden kann und Sie keine gültigen Eingaben für die Methode annehmen können. Dies gilt insbesondere, wenn dies eine Komponente ist, die von anderen Anwendungen verwendet wird.

Für Privatpersonen halte ich es für eine Verschwendung, weil Sie kontrollieren, was an die Methoden weitergegeben wird, damit die Daten überprüft werden sollten, bevor Sie die private Methode aufrufen.

    
dcp 17.05.2010 15:05
quelle
0

Genau - wenn Sie Ihre App gut entwerfen, sollte es nicht notwendig sein.

    
Jakub Hampl 17.05.2010 15:05
quelle
0

Ich würde sagen, dass es egal ist, um welche Art von Methode es sich handelt (öffentlich, privat, geschützt), Sie ergreifen angemessene Vorkehrungen, wann immer das nötig ist, ohne auf das Schlüsselwort visibility zu schauen.

    
Tower 17.05.2010 19:59
quelle
-1

Bereinigen Sie die Eingabe nur bei der letzten möglichen Chance. Ich sehe nicht, wie OO-Semantik das anders macht.

Zum Beispiel wenn aus irgendeinem Grund Sie keine parametrisierten Abfragen oder ein ORM verwenden können (ich denke nur an ein Beispiel :), schreiben Sie die Funktion so:

%Vor%

Nun ist es unmöglich, dass irgendein Code diese Funktion aufruft und unerwartete Ergebnisse verursacht.

    
quelle

Tags und Links