Frage

Haben sie widersprechen?

Die Entkoppelung ist etwas Großes und ziemlich schwer zu erreichen. Doch in den meisten Anwendungen wir es nicht wirklich brauchen, so dass ich sehr gekoppelt Anwendungen entwerfen können, und es wird fast nichts anderes als offensichtliche Nebenwirkungen wie „Sie können nicht getrennte Komponenten“ ändern „, Unit-Tests ist der Schmerz in der ass“etc.

Was denken Sie? Versuchen Sie immer mit dem Overhead zu entkoppeln und behandeln?

War es hilfreich?

Lösung

Es scheint mir, Entkoppeln und YAGNI sind sehr komplementär Tugenden. (Ich habe gerade bemerkt Robs Antwort, und es scheint, wie wir hier auf der gleichen Seite.) Die Frage ist, wie viel Entkopplung sollten Sie tun, und YAGNI ist ein gutes Prinzip, um die Antwort zu bestimmen. (Für diejenigen, die von Unit-Tests sprechen -. Wenn Sie entkoppeln müssen, um Ihr Gerät zu testen zu tun, dann offensichtlich nicht YAGNI keine Anwendung)

Ich bezweifle wirklich aufrichtig die Leute, die sagen, dass sie „immer“ entkoppeln. Vielleicht tun sie immer jedes Mal, wenn sie daran denken. Aber ich habe noch nie ein Programm, wo zusätzliche Abstraktionsschichten konnte nicht hinzugefügt werden irgendwo gesehen, und ich bezweifle es ist ein nicht-triviales Beispiel eines solchen Programms gibt. Jeder zieht eine Linie irgendwo.

Aus meiner Erfahrung habe ich deoupled Code und dann nie so oft die Vorteile der zusätzlichen Flexibilität genommen, wie ich verlassen habe Code gekoppelt und dann wieder gehen musste und es später zu ändern. Ich bin mir nicht sicher, ob das bedeutet, dass ich bin gut ausgewogen oder gleich in beiden Richtungen gebrochen.

Andere Tipps

YAGNI ist eine Faustregel gilt: (keine Religion). Die Entkoppelung ist mehr oder weniger eine Technik (auch keine Religion). Sie sind also nicht wirklich verwandt, noch haben sie einander widersprechen.

YAGNI ist über Pragmatismus. Angenommen, Sie nicht etwas brauchen, bis Sie tun.

In der Regel YAGNI Ergebnisse in Entkopplung nehmen. Wenn Sie nicht überhaupt das Messer anwenden, Sie am Ende unter der Annahme, dass Sie Klassen haben müssen, die alle über das jeweils andere Verhalten wissen, bevor Sie haben gezeigt, dass um wahr zu sein.

„Entkoppeln“ (oder „loses Paar“) ist ein Verb, so erfordert es Arbeit. YAGNI ist eine Vermutung, für die Sie einstellen, wenn Sie feststellen, dass es nicht mehr wahr.

ich (fast) immer entkoppeln. Jedes Mal, wenn ich dies tat, fand ich es nützlich, und (fast) jedes Mal, wenn ich es nicht tat ich es später zu tun hatte. Ich habe festgestellt, es auch eine gute Möglichkeit, die Anzahl der Fehler zu verringern.

Ich würde sagen, dass sie dies nicht tun. Die Entkoppelung ist über unnötige Abhängigkeiten innerhalb Code zu reduzieren und Verschärfung greift durch saubere, gut definierte Schnittstellen. „Sie ist nicht gonna braucht es“ ein nützliches Prinzip ist, die gegen rät generell über Erweiterbarkeit und zu weit gefasster Architektur einer Lösung, wo es kein offensichtlicher und aktuelle Anwendungsfall.

Das praktische Ergebnis davon ist, dass Sie ein System haben, wo es viel einfacher ist, Refactoring und einzelne Komponenten beibehalten, ohne versehentlich eine Signalwirkung für die gesamte Anwendung verursacht, und wo es keine unnötig komplizierte Aspekte der Gestaltung - es ist so einfach wie erforderlich, um die aktuellen Anforderungen gerecht zu werden.

Die Entkoppelung zum Zweck der Entkopplung kann schlecht sein. prüfbare Komponenten zu bauen ist allerdings sehr wichtig.

Der harte Teil der Geschichte ist, zu wissen, wann und wie viel Entkopplung Sie benötigen.

Wenn „Unit-Tests eine Nervensäge ist“, dann würde ich sagen, dass Sie Sie es braucht. Die meiste Zeit Entkopplung kann auch mit nahezu Null Kosten erreicht werden, also warum würden Sie nicht wollen, es zu tun?

Darüber hinaus einer meiner größten bugbears, wenn sie auf einer neuen Code-Basis arbeitet mit dem Code zu entkoppeln, bevor ich Unit-Tests zu schreiben beginnen, wenn die Einführung einer Schnittstelle irgendwo oder die Verwendung von Dependency Injection viel Zeit sparen könnte

Wie Ihr Tag sagt, es ist sehr subjektiv. Sie beruht ganz auf Ihre eigenen Engineering-Weisheit zu entscheiden, was Sie „ist nicht gonna need“. Sie können Kupplung in einem Fall benötigen, aber Sie werden in einem anderen nicht. Wer ist zu sagen? Sie , natürlich.

Für eine Entscheidung so subjektiv, dann kann es keine Richtlinie verschreiben.

Nun, das ist YAGNI wenig mehr als ein Schein simplen Satz Leute um zu werfen. Die Entkoppelung ist jedoch ein ziemlich gut verstanden Konzept. YAGNI scheint zu implizieren, dass man irgendeine Art von psychischen ist. Es ist die Programmierung nur durch Klischee, das nie eine gute Idee ist. Um ehrlich zu sein, gibt es einen Fall gemacht wird, dass YAGNI ist wahrscheinlich gar nicht zu Entkopplung verwendet. Die Kupplung ist in der Regel „schneller“ und „wer weiß, ob du bist du gehst eine entkoppelte Lösung müssen;! Sie sind nicht gonna change X-Komponente sowieso“

YAGNI das Chaos :) ... wirklich, wir brauchen nicht den gesamten Code zu haben, gemischt zu gehen „schneller“.

Die Unit-Tests wirklich Gefühl helfen, wenn sie gekoppelt ist (ein gut gegeben verstehen, was ein Unit-Test im Vergleich zu anderen Arten von Tests ist). Wenn Sie stattdessen mit dem tun „können Sie nicht Komponenten trennen“ Mentalität, können Sie einfach Sachen hinzufügen, die Sie nicht gonna Notwendigkeit ist:)

Ich würde sagen, YAGNI in kommt, wenn Sie anfangen zu drehen und alle um Logik zu ändern über die eigentlichen Nutzungsszenarien für die aktuelle Implementierung aufruft. Lassen Sie uns sagen Sie einen Code haben, der ein paar externe Zahlungsanbieter, die beide arbeiten mit Umleitungen auf eine externe Seite verwendet. Es ist in Ordnung, ein Design zu haben, die alles sauber hält, aber ich glaube nicht, dass es in Ordnung ist Denken von Anbietern zu starten, wir wissen nicht, ob jemals die die Integration viele anderen Art und Weise unterstützt haben und die damit verbundene Handhabung Workflow.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top