Chociaż łatwość zrozumienia i do pewnego stopnia wymienne komponenty są z pewnością dobrym powodem, równie ważnym powodem (i prawdopodobnie powodem, dla którego warstwy zostały wymyślone w pierwszej kolejności) jest z punktu widzenia konserwacji oprogramowania. Najważniejsze jest to, że zależności powodują potencjalne uszkodzenie.
Załóżmy na przykład, że A zależy od B. Ponieważ nic nie zależy od A, programiści mogą dowolnie zmieniać A na zawartość swoich serc, nie martwiąc się, że mogą złamać wszystko inne niż A. Jednak jeśli deweloper chce zmienić B, to każda zmiana w utworzonym B może potencjalnie uszkodzić A. To był częsty problem we wczesnych dniach komputerowych (pomyśl o programowaniu strukturalnym), gdzie programiści naprawiali błąd w jednej części programu i powodowali błędy w pozornie całkowicie niezwiązanych częściach programu w innym miejscu. Wszystko z powodu zależności.
Kontynuując przykład, załóżmy teraz, że A zależy od B, a B zależy od A. IOW, zależności cyklicznej. Teraz, za każdym razem, gdy wprowadzana jest zmiana w dowolnym miejscu, może to potencjalnie uszkodzić inny moduł. Zmiana B nadal mogłaby przerwać A, ale teraz zmiana A mogłaby również złamać B.
Tak więc w swoim pierwotnym pytaniu, jeśli jesteś w małym zespole przy małym projekcie, to wszystko jest dość przesadne, ponieważ możesz swobodnie zmieniać moduły według własnego uznania. Jeśli jednak masz duży projekt, jeśli wszystkie moduły zależą od innych, to za każdym razem, gdy potrzebna jest zmiana, może to potencjalnie uszkodzić inne moduły. W dużym projekcie znajomość wszystkich wpływów może być trudna do ustalenia, więc prawdopodobnie przegapisz niektóre z nich.
Gorzej w przypadku dużego projektu, w którym jest wielu programistów (np. Niektórzy pracujący tylko w warstwie A, niektórzy w warstwie B i niektórzy w warstwie C). Ponieważ staje się prawdopodobne, że każda zmiana musi zostać przejrzana / omówiona z członkami na innych warstwach, aby upewnić się, że zmiany nie ulegają zerwaniu ani nie wymuszają przeróbki tego, nad czym pracują. Jeśli twoje zmiany wymuszają zmiany na innych, musisz ich przekonać, że powinni dokonać zmiany, ponieważ nie będą chcieli podejmować więcej pracy tylko dlatego, że masz świetny nowy sposób robienia rzeczy w swoim module. IOW, biurokratyczny koszmar.
Ale jeśli ograniczyłeś zależności do A, zależy od B, B zależy od C, to tylko ludzie z warstwy C muszą koordynować swoje zmiany w obu zespołach. Warstwa B musi tylko koordynować zmiany z zespołem Warstwy A, a zespół warstwy A może robić, co chce, ponieważ ich kod nie wpływa na warstwy B lub C. Idealnie, zaprojektujesz swoje warstwy, więc warstwa C zmieni się bardzo trochę, warstwa B nieco się zmienia, a warstwa A robi większość zmian.