1. Package by Layer vs. Package by Feature
Wenn wir ein Projekt erstellen und uns überlegen wie wir die Packages aufteilen, haben wir folgende Möglichkeiten.
Die linke Option heißt 'Package by Layer' und die rechte Option 'Package by Feature'.
1.1. Package by Layer
…würde im Projekt-Explorer wie folgt aussehen.
Hier werden die Packages (Ebenen) nach Layer vergeben. Alle JPAs sind in einem Package, sowie auch alle Entities oder Repositories, etc…
Für kleinere Projekte zu empfehlen.
1.2. Package by Feature
Hier werden die Packages (Ebenen) nach Features ausgerichtet. Wir haben zum Beispiel die REST-Schnittstelle 'accounting', die sich komplett in einem eigenen Package befindet.
Vorteil davon ist, dass dies schon eine Vorstufe zur Zerteilung zu Microservices ist. So eingeteilte Projekte können damit besser zerlegt werden.
Die Kapselung ist hier besser, da die Klassen teilweise auf package-private gesetzt werden können und somit nur innerhalb des Packages sichtbar sind. Im Falle des 'Package by Layer' wären die Klassen alle public und somit von überall sichtbar.
Wird als Refactoring für mittlere Projekte empfohlen.