Gdy kod związany z dziedziną jest rozproszony niezmiernie trudno jest go zrozumieć oraz dostrzec. Pobieżne zmiany do interfejsu użytkownika mogą zmienić również logikę biznesową, natomiast zmiana reguły biznesowej może wymagać skrupulatnego śledzenia kodu użytkownika. Implementacja spójnych obiektów staje się niepraktyczna, a testowanie automatyczne jest niewygodne. Istnieje wiele sposobów podziału systemu informatycznego, jednak doświadczenie przemysłowe pozwoliło utworzyć i zdefiniować architektury warstwowe. Warstwa interfejsu użytkownika - odpowiedzialna za wyświetlanie informacji dla użytkownika wraz z interpretacją jego poleceń Warstwa aplikacji - definiuje zamierzone zadania programu i steruje obiektami dziedziny w celu rozwiązania postawionych przed nimi zadań Warstwa dziedziny - warstwa odpowiedzialna za reprezentację zagadnień biznesowych, informacji o sytuacji biznesowej oraz reguł biznesowych Warstwa infrastruktury - udostępnia podstawowe możliwości techniczne wspierające warstwy wyższe tj.