Jeden z portali rekrutacyjnych przetłumaczył ten artykuł: https://medium.com/slalom-build/clean-architecture-with-java-11-f78bba431041
Mam kilka pytań do tego schematu.
Zysk opiera się na wykorzystaniu modułów do izolacji warstw, gdzie warstwy centralne nie wiedzą o sposobie w jaki zostaną użyte (czyli na moje zwykłe Liskov Substitution Principle wyniesione na poziom warstwy). W warstwie use case widać taką metodę:
public Optional<User> findById(final String id) {
return repository.findById(id);
}
Gdzie definicja User
jest w warstwie encji a o repository
wiemy tyle, że "jest w innym module, nie przejmuj się". I tutaj pojawia się moja zagwozdka: Jeżeli zewnętrzny "nie przejmuj się" moduł zwraca obiekt typu User
, to musi być zależnym od warstwy encji, podobnie jak moduł przypadków użycia. Na czym polega wartość stworzenia dodatkowego modułu? Czy chodzi o to, że moduł z repository ma wymuszone granice czego może, a czego nie może użyć + fizyczne wyrzucenie implementacji dostępu do danych z logiki biznesowej?
Jak do powyższego ma się
Any layer can only reference a layer below it and know nothing about what’s going on above.
Jeżeli encja User jest wypychana aż do samego endpointu i ma spore szanse stać się jednocześnie DAO?
Gdzie w tym wszystkim podziały się interface'y? Uproszczenie artykułu, czy wyszły z mody?
Czy clean architecture to kolejne buzz word, artykuł przekłamuje genialną ideę, czy ja nie ogarnąłem jej doniosłości i czepiam się głupot?