Wpis z mikrobloga

@kasztanozord: prawie żadnych, generalnie wtedy kiedy nie masz nic przeciwko statycznemu zbindowaniu dwóch klas jedna z drugą i wiesz, że to nigdy przenigdy nie będzie rozdzielone. I nawet w takim przypadku - by nie było śmietnika - najlepiej mieć logiki tych dwóch klas oddzielone, więc żadnych pól protected, tylko metody conajwyżej coby komunikacja między nimi była.
  • Odpowiedz
w jakich sytuacjach przydaje się dziedziczenie skoro można użyc kompozycji?


@kasztanozord: Nie przydaje się, w programowaniu obiektowym dziedziczenie (żeby być precyzyjnym: dziediczenie implementacji, czyli w Javie słowo kluczowe extends) nie powinno być używane, bo to czysto proceduralna metoda reużycia kodu.
  • Odpowiedz
@alex-fortune: Metody DAO które obsługują CRUD dla entity na bazie danych, ewentualnie kilka dodatkowych metod najczęściej używanych. Generic bo działa dla wszystkich entity. Podstawowy pattern przy webówce. Jakby kto do niego nie podchodził to używa dziedziczenia. I to jedna z sytuacji o które pytał @kasztanozord
Ponieważ dość kategorycznie wypowiadacie się na nie jeśli chodzi o używanie dziedziczenia implementacji, pytam jak wy to rozwiązujecie?
  • Odpowiedz
Podstawowy pattern przy webówce


@Koryntiusz: Mowisz podstawowy, a ja jakos raw query albo ORMowe encje ( ͡° ͜ʖ ͡°) a w webowce robilem z 10 lat chyba

Generalnie jesli chodzi o kod ściśle związany z jakimś frameworkiem, to jeśli lib pozwala to też bym wydzielił funkcjonalność do innego obiektu ,ale jeśli framework nakazuje tak a nie inaczej to może być, ten kod i tak dla mnie
  • Odpowiedz
Mowisz podstawowy, a ja jakos raw query albo ORMowe encje ( ͡° ͜ʖ ͡°) a w webowce robilem z 10 lat chyba


@alex-fortune: Co znaczy raw query? Pisałeś sql i używałeś jdbc? Jeśli używałeś ORM to tym bardziej się dziwie, że nie wiesz co to generic DAO i to jeszcze jeśli robiłeś to 10 lat...

Zresztą to nie jest powiązane z konkretnym frameworkiem. Ale pomijając jak to można zrobić i frameworki, odwołajmy się do Twojego doświadczenia - w jaki sposób rozwiązywałeś problem powtarzających się query w projekcie (metod
  • Odpowiedz
Co znaczy raw query? Pisałeś sql i używałeś jdbc? Jeśli używałeś ORM to tym bardziej się dziwie, że nie wiesz co to generic DAO i to jeszcze jeśli robiłeś to 10 lat...


@Koryntiusz: tak, pisałem SQL.

Na wstępie zaznaczmy, że mam background z "konkurencyjnej" platformy, więc możemy rozmijać się w definicjach bo niestety ale jakimś #!$%@? cudem programistom strasznie ciężko jest ujednolicić wszystkie pojęcia. To co Ty mówisz - "Generic DAO", w moim "środowisku" nazywało się EntityManagerem. Takowy EM był jeden dla wszystkich typów, nie był też generyczny, także co środowisko to jakiś
  • Odpowiedz
To co Ty mówisz - "Generic DAO", w moim "środowisku" nazywało się EntityManagerem. Takowy EM był jeden dla wszystkich typów, nie był też generyczny, także co środowisko to jakiś pomysł


@alex-fortune: Ja też używam entity managera ale w DAO ;) Tu przykład niezbyt rozbudowanego Generic DAO z użyciem entity managera na springu i hibernate: http://www.baeldung.com/simplifying-the-data-access-layer-with-spring-and-java-generics

Natomiast jeśli chodzi o ten ,,krytyczny kod", i o to czy extends czy kompozycja, to
  • Odpowiedz
@alex-fortune:
Hmm, a dlaczego nie jestem w stanie podmienić doStuffInA? Mock w tej sytuacji nie będzie się różnił tylko o tyle?
Kompozycja:
1. when(a.doStuffInA()).thenReturn(1);
Dziedziczenie:
2. when(b.doStuffInA()).thenReturn(1);
  • Odpowiedz
@Koryntiusz: Na jakiej zasadzie? Można - teoretycznie - zrobić extends klasy, którą testujesz ( class YourTestingObj extends YourRealObj ) i nadpisywać metody , które są protected, ale zakładawszy, że to jakie metody mockujesz jest definiowane w runtime - a jest, bo w końcu Twój test to tylko zwykły kod który jest wykonywany - to wymaga to czegoś na zasadzie dynamicznego generowania klas. No i faktycznie, Mockito używa do tego https://github.com/raphw/byte-buddy
  • Odpowiedz