DTO: data transfer object
ez lehet bármilyen két komponens közötti kommunikációban szereplő
DAO: data access object
ez egy olyan objektum, amin keresztül adatokat érünk el/tudunk manipulálni, általában adatbázissal a túloldalon - az objektum elrejti a DB részleteket
repository:
a DAO-hoz hasonló pattern, inkább domain centrikusabb, az adat objektumokat entity-nek hívjuk ebben az esetben
A rétegek szervezése/szeparálása fontos dolog, nehéz elsőre ráérezni, fog kelleni hozzá némi tapasztalat. Annyit szerintem mindenképp jegyezz meg most, hogy nincs semmi kőbe vésve. Vannak ajánlások, de mindig az adott problémához keressük a megoldást, nem pedig valami "best practice-t" erőszakolunk rá mindenre.
Amennyiben egy egyszerű crud a cél, akkor nem is feltétlen szükséges külön entity/dto/pojo-kat készíteni a különböző rétegekhez, mert fölöslegesen kéne transzformálgatni mindent többször is.
Ha a crud-nál tovább lépünk vagy más jellegű a probléma, akkor hasznos lehet különválasztani a rétegeket jobban.
Amúgy olvass még kicsit utána funkcionális programozásnak, immutability-nek - java 8 óta java-ban is van hozzá támogatás - szerintem árnyalja majd a képet.
A Spring JavaEE vs sima java témakörben pedig én javaslom a keretrendszer használatát, ha máshoz nem is, de a dependency injection miatt mindenképpen.