Test Driven Development (TDD) ist kein Design. Dies ist eine Anforderung, die sich auf Ihr Design auswirkt. Genau so, als müssten Sie threadsicher sein, das ist kein Design. Auch dies ist eine Anforderung, die sich auf Ihr Design auswirkt.
Wenn Sie fröhlich alle anderen Designprobleme ignorieren und die TDD-Regeln religiös einhalten, machen Sie TDD nicht dafür verantwortlich, wenn sich Ihr Code in Mist verwandelt. Es wird testbarer Mist sein, aber es wird Mist sein.
Eine nette Sache an testbarem Mist ist, dass es refactorable Mist ist, also für einige Leute, die gut genug sind. Wir werden nur dann Lust bekommen, wenn es nötig ist. Andere hassen das und machen TDD dafür verantwortlich. Nein, das machst du.
Domain Driven Design (DDD) wird vor dem Rot-Grün-Refactor-Zyklus von TDD durchgeführt.
DDD ist das Bemühen, einen Bereich im Code zu erstellen und beizubehalten, in dem ein Domänenexperte, der die Details des Systems weitgehend nicht kennt, verstehen kann, wie das System gesteuert wird. Dies geschieht durch Abstraktion und Modellierung einer Problemdomäne auf bekannte Weise.
Ein DDD-System kann eine Architektur haben, die folgendermaßen aussieht:

Diese DDD - Architektur hat viele Namen: Clean , Onion , Hexagonal usw
Ist hier die Trennung, die ich sehe, dass viele Leute haben, wenn sie diesen Entwurf betrachten. Das ist nicht konkret. Ich kann diesem Entwurf folgen und habe noch nie etwas geschrieben, das Sie hier in einem Diagramm sehen. Ich sehe, dass andere darauf bestehen, dass es ein Use-Case-Objekt oder eine Entitätsklasse geben muss. Was dies sind, ist ein Satz von Regeln, die Ihnen sagen, mit wem Sie sprechen können und wie.
Das ist es. Befolgen Sie die Regeln dieses Entwurfs und Sie können Ihr kleines Herz heraus TDD. TDD ist es egal, mit wem Sie sprechen. Es ist wichtig, dass auf Knopfdruck nachgewiesen werden kann, dass alles, was etwas bewirkt, funktioniert oder nicht. Nicht, irgendwo ist etwas kaputt. Es sagt dir genau, was kaputt ist.
Immer noch zu vage? Schauen Sie sich das Controler- Use Case Interactor- PresenterDiagramm in der unteren rechten Ecke an. Hier sind drei konkrete Dinge, die miteinander kommunizieren. Sicher, das ist DDD, aber wie fügt man hier TDD hinzu? Verspotten Sie einfach das konkrete Zeug. Der Moderator muss Informationen erhalten. Eine PresenterMockKlasse wäre ein guter Weg, um zu überprüfen, ob sie das bekommt, was Sie erwartet haben. Hand , um die Use Case Interactordas PresenterMockund fahren die , Use Case Interactorals ob Sie die waren , Controllerund Sie haben eine schöne Art und Weise zu Unit - Test der Use Case Interactorseit der mock wird Ihnen sagen , wenn es bekommen , was Sie erwartet , es zu bekommen.
Na sieh dir das an. TDD zufrieden und wir mussten mit unserem DDD-Design nicht viel anfangen. Wie ist das passiert? Wir haben mit einem gut entkoppelten Design begonnen.
Wenn Sie TDD verwenden Design zu fahren (nicht nur D evelopment) Sie ein Design erhalten, die den Aufwand reflektiert man hineinsteckt. Wenn es das ist, was du willst, gut. Aber dafür war TDD nie gedacht. Was dabei letztendlich fehlt, ist sicherlich nicht TDDs Schuld.
Bei TDD geht es nicht um Design. Wenn Sie Designänderungen vornehmen müssen, um TDD zu verwenden, haben Sie größere Probleme als das Testen.