Heim >Java >javaLernprogramm >Wie konnte unser Unternehmen 2.000 If-Else im Projekt vollständig eliminieren?
5 Möglichkeiten, bessere Software zu entwerfen und If-Else zu ersetzen. Beispiele für Anfänger bis Fortgeschrittene
Lassen Sie mich Folgendes sagen: If-Else ist normalerweise eine schlechte Wahl.
Es führt zu komplexen Designs, schlechter Lesbarkeit des Codes und kann zu Schwierigkeiten beim Refactoring führen.
Allerdings ist If-Else zur De-facto-Code-Verzweigungslösung geworden, und es macht durchaus Sinn. Dies ist das Erste, was allen angehenden Entwicklern beigebracht wird. Leider entwickeln viele Entwickler nie eine geeignetere Verzweigungsstrategie.
Das Mantra einiger Leute lautet: Wenn-sonst ist ein Hammer, alles ist ein Nagel.
Die Unfähigkeit zu erkennen, wann eine geeignetere Methode anzuwenden ist, ist eines der Dinge, die Junioren von Junioren unterscheiden.
Ich zeige dir einige Tipps und Muster, die dieser schrecklichen Praxis ein Ende setzen werden.
Der Schwierigkeitsgrad steigt mit jedem Beispiel.
Dies ist vielleicht einer der schuldigsten dieser Nachwuchsentwickler. Das folgende Beispiel ist ein großartiges Beispiel dafür, was passiert, wenn Ihnen gesagt wird, dass If-Else großartig ist.
Entfernen Sie einfach den else-Block, um diesen Vorgang zu vereinfachen.
Sieht professioneller aus, oder?
Oft werden Sie feststellen, dass eigentlich gar keine weiteren Bausteine benötigt werden. Wie in diesem Fall möchten Sie eine Aktion ausführen und sofort zurückkehren, wenn eine bestimmte Bedingung erfüllt ist.
Wenn Sie einer Variablen basierend auf einer bereitgestellten Eingabe einen neuen Wert zuweisen, stoppen Sie den If-Else-Unsinn – ein besser lesbarer Ansatz.
So einfach es auch ist, es ist scheiße. Erstens kann If-Else hier leicht durch einen Schalter ersetzt werden. Wir können diesen Code jedoch noch weiter vereinfachen, indem wir else vollständig entfernen.
Wenn nichts anderes verwendet wird, bleibt sauber lesbarer Code übrig. Beachten Sie, dass ich den Stil auch in eine schnelle Rückgabe anstelle einer einzelnen Rückgabeanweisung geändert habe – es macht keinen Sinn, mit dem Testen eines Werts fortzufahren, wenn der richtige Wert bereits gefunden wurde.
Normalerweise finde ich, dass es keinen Sinn macht, die Ausführung fortzusetzen, wenn eine Methode einen ungültigen Wert liefert.
Angenommen, wir haben die DefineGender-Methode von zuvor, die erfordert, dass der bereitgestellte Eingabewert immer 0 oder 1 sein muss.
Es macht keinen Sinn, die Methode ohne Wertvalidierung auszuführen. Daher müssen wir einige Voraussetzungen überprüfen, bevor wir die Ausführung der Methode zulassen.
Durch die Anwendung der defensiven Codierungstechnik mit Schutzklauseln überprüfen Sie den Eingabewert der Methode und fahren dann mit der Ausführung der Methode fort.
An dieser Stelle stellen wir sicher, dass die Hauptlogik nur ausgeführt wird, wenn der Wert in den erwarteten Bereich fällt.
IF wurde nun auch durch ein Ternär ersetzt, da am Ende nicht mehr standardmäßig auf „unbekannt“ gesetzt werden muss.
Angenommen, Sie müssen einige Operationen ausführen, die eine Auswahl basierend auf bestimmten Bedingungen durchführen. Wir wissen, dass wir später weitere Operationen hinzufügen müssen.
Vielleicht greifen manche lieber auf das altbewährte If-Else zurück. Wenn Sie eine neue Aktion hinzufügen, fügen Sie einfach etwas anderes hinzu. Sehr einfach, dieser Ansatz ist jedoch im Hinblick auf die Wartung kein gutes Design.
Da wir wissen, dass wir später neue Operationen hinzufügen müssen, können wir If-Else in ein Wörterbuch umwandeln.
Die Lesbarkeit wurde erheblich verbessert und der Code kann leichter abgeleitet werden.
Beachten Sie, dass das Wörterbuch nur zur Veranschaulichung in die Methode eingefügt wird. Möglicherweise möchten Sie es von woanders bereitstellen.
Dies ist ein etwas fortgeschritteneres Beispiel.
Wissen Sie, wann Sie Ifs sogar ganz eliminieren müssen, indem Sie sie durch Objekte ersetzen.
Häufig werden Sie feststellen, dass Sie einige Teile Ihrer Bewerbung erweitern müssen. Als Junior-Entwickler könnten Sie versucht sein, dies zu tun, indem Sie zusätzliche If-Else-Anweisungen (d. h. else-if) hinzufügen.
Geben Sie dieses anschauliche Beispiel. Hier müssen wir die Order-Instanz als String anzeigen. Erstens haben wir nur zwei String-Darstellungen: JSON und Klartext. Die Verwendung von If-Else ist zu diesem Zeitpunkt keine große Sache, wenn wir die anderen, wie bereits erwähnt, problemlos ersetzen können.
Da wir wissen, dass wir diesen Teil der Anwendung skalieren müssen, ist dieser Ansatz absolut inakzeptabel.
Der obige Code verstößt nicht nur gegen das „Öffnen/Schließen“-Prinzip, sondern ist auch nicht gut lesbar und kann zu Problemen bei der Wartbarkeit führen.
Der richtige Ansatz ist der, der den SOLID-Prinzipien folgt – wir erreichen dies durch die Implementierung eines dynamischen Typerkennungsprozesses (in diesem Fall das Strategiemuster).
Der Prozess der Umgestaltung dieses chaotischen Prozesses ist wie folgt:
· Extrahieren Sie jeden Zweig mithilfe einer gemeinsamen Schnittstelle in eine separate Strategieklasse.
· Finden Sie dynamisch alle Klassen, die die gemeinsame Schnittstelle implementieren.
· Entscheiden Sie, welche Strategie basierend auf ausgeführt werden soll Eingabe
Der Code zum Ersetzen des obigen Beispiels lautet wie folgt. Ja, das ist viel mehr Code. Dazu ist es erforderlich, dass Sie verstehen, wie die Typerkennung funktioniert. Aber die dynamische Skalierung von Anwendungen ist ein fortgeschrittenes Thema.
Ich zeige nur den genauen Teil, der das If-Else-Beispiel ersetzen wird. Wenn Sie alle beteiligten Objekte sehen möchten, sehen Sie sich diese Zusammenfassung an.
Werfen wir einen kurzen Blick auf den Code.
Die Methodensignatur bleibt unverändert, da der Aufrufer nichts von unserem Refactoring wissen muss.
Erstens rufen Sie alle Typen in der Assembly ab, die die gemeinsame Schnittstelle IOrderOutputStrategy implementieren. Dann erstellen wir ein Wörterbuch, der Name des Anzeigenamens des Formatierers ist der Schlüssel und der Typ ist der Wert.
Wählen Sie dann den Formatierungstyp aus dem Wörterbuch aus und versuchen Sie, das Richtlinienobjekt zu instanziieren.
Zum Schluss rufen Sie ConvertOrderToString des Strategieobjekts auf.
Das obige ist der detaillierte Inhalt vonWie konnte unser Unternehmen 2.000 If-Else im Projekt vollständig eliminieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!