Ich würde sagen, nicht mit TDD zu beginnen. Treffen Sie eine fundierte Entscheidung, wenn Sie mehr Zeit mit dem Erlernen von Architekturstrategien im Allgemeinen verbracht haben. TDD lässt Sie diese Hausaufgaben nicht überspringen, obwohl Sie vielleicht glauben, dass dies der Fall ist.
Hier ist mein Problem damit. Wenn Sie sagen, es scheint eine Menge Zeit für Dinge zu verschwenden, die TDD niemals kaputt machen. Wenn Sie darauf hinweisen, dass es unmöglich ist, solche Dinge vorherzusagen, bevor Sie Ihre App schreiben, wird Ihnen gesagt, dass es mehr um Design geht und nicht um Testen, obwohl das Testen praktisch ist.
Aber sind riesige Ketten unvorhersehbarer Abhängigkeiten nicht das Produkt beschissenen Designs?
Also was ist es?
Hier ist ein Gedanke. Lassen Sie uns nicht erst riesige komplexe Abhängigkeitsketten haben, wenn Sie die folgenden zwei Prinzipien des objektorientierten Entwurfs aus Entwurfsmustern betrachten:
"Programm auf eine Schnittstelle, keine Implementierung"
Das heißt, Ihren Objekten sollte es egal sein, wer den Aufruf ausführt oder wie sie erstellt wurden. Nur, dass die richtigen Argumente eingegeben wurden und dass die Methoden, die sie von anderen Objekten aufrufen, erwartungsgemäß funktionieren. Ihre Abhängigkeitskette sollte sich in den meisten Fällen an einem Verknüpfungspunkt befinden, dem Methodenaufruf des Aufrufers und der Stelle, an der die Argumente in Ihre Methoden eingefügt werden. Hier melden Sie sich an, validieren und senden nützliche Meldungen zum Debuggen, wenn die Dinge schief gehen.
Und:
"Bevorzugen Sie die Objektzusammensetzung gegenüber der Klassenvererbung"
Wer ist der Dummy? Der Typ, der einer Klasse in einem verworrenen, kaskadierenden Vererbungsschema etwas angetan hat, das etwa 30 Klassen umfasst, die zu einem Bruch der Randbedingungen führen, oder der Entwickler, der sich diese Architektur überhaupt ausgedacht hat? TDD könnte Ihnen helfen, Probleme in diesem schiefen Turm der Klasse Pisa früher zu lösen, als Sie es ohne hätten tun können, aber macht es das weniger schmerzhaft, wenn Sie das nächste Mal versuchen, einen der Endpunkte dieser Code-Katastrophe zu ändern?
Und hier komme ich zu dem, was mich nervt. Hilft TDD wirklich beim Entwerfen oder ermöglicht es eine schlechte Architektur? Es scheint mir, dass es Potenzial hat, eine sich selbst erfüllende Strategie zu sein. Je weniger Ihr Team für schlechte Architektur verantwortlich sein muss, desto hilfreicher scheinen diese detaillierten Testkomponenten zu werden, aber letztendlich wird Ihre App zu einem immer größeren PITA, mit dem es zu arbeiten gilt (vorausgesetzt, sie haben in der ersten Phase nicht viel über Architektur nachgedacht Ort). Und die Konsequenzen nicht zu erkennen, ist zweifellos der teuerste Fehler, den Sie machen können, wenn Sie an einer Anwendung arbeiten, die im Laufe der Zeit aktualisiert und geändert werden soll.