A dlaczego VM a nie DTO? VM to kontrakt widoku najczęściej z aspektami które implementują dodatkowe zachowania widoku ale oczywiście nie tylko w taki sposób można je implementować.
Bo odzwierciedla to, co zostanie pokazane w widoku aplikacji, więc dla mnie to VM. Ale jak chcesz, to sobie to nazywaj DTO. Na pewno nie jest to PM, czyli nieobrobiona struktura tabel z bazy.
Miejsce ViewModelu jest w warstwie perezentacji, w której jest zaimplementowany wzorzec projektowy prezentacji MVC najczęściej wymuszony przez framework prezentacji internetowej.
No czyli to Ty chcesz, aby warstwa mająca dostęp do bazy odczytywała jakieś dane i zwracała je w postaci obiektów, które następnie dopiero będą mapowane na VM? Bo jak dla mnie to nie ma problemu w napisaniu sobie warstwy zwracającej viewmodele ze źródła danych i konsumowanej przez warstwę prezentacji. Bez zbędnego żonglowania obiektami. No, ale ja sobie lubię ułatwiać, a nie utrudniać.
Według twojego toku myślenia mógłbyś w warstwie domenowej zaimplementować paginację
Nie wiem czyj to tok myślenia, ale na pewno nie mój. Warstwa domenowa w ogóle nie ma żadnego związku z pobieraniem i wyświetlaniem danych.
ViewModel istnieje po to, żeby implementować zachowania lub typy, które nie wynikają z domeny a widoku.
Jakiej domeny? Przy pobieraniu danych? Jakie zachowania ma model służący do odczytu?
Nie koniecznie. Hibernate został zaprojektowany z myślą o odwzorowaniu obiektów Domain Model(z niewiadomych pobudek :) ). Dlatego możesz ustawić jego mapowanie poza klasą, na którą mapujesz.
Mogę też w XML. Ale z tego nie wynika, że dekorowanie atrybutami persistence modelu jest w jakikolwiek sposób złe.
Jeśli uważasz, na slect N+ to jaki jest problem, chodzi ci o to, że to proxy. Czy po prostu ten sufiks na końcu jest nie taki?
Nie mam zielonego pojęcia o czym piszesz.
A jeśli chcesz użyć lazy loading w widoku np. po wciśnieciu jakiegoś buttona (z wykluczeniem aplikacji webowych, bo to bez sensu) to jak to zrobisz? Będziesz to implementował koło ORM'a?
Nie wiem, encja na twarz i pchasz to nie jest coś, co praktykuję. Do odczytu zawsze stosuje dopasowane viewmodele, zawsze pobieram je jak najbliżej źródła danych się da, lazy loadingu do prezentacji danych nigdy nie używałem.