Wpis z mikrobloga

dostałem reviewu kodu od jakiegoś fachowca i zastanawiam się czy ja jestem takim leszczem czy jak

koleś twierdzi, że w #java:
1) nie powinno się pisać zagnieżdżonych enumów w klasach, nawet jeśli są ściśle powiązane z klasą i są zaenkapsulowane
2) używanie Hibernate kiedy można było użyć JPA to nieporozumienie
3) mapper dla klas domenowych i data transfer object to antypattern
4) test jednostkowy jest nieczytelny jeśli nie ma struktury given..when..then (czyt. jedyna poprawna forma)

co na to wykopowi eksperci? #programowanie #programista15k
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@whoru: ogólnie musiał bym zobaczyć, ale :

1) enumy dziś się pisze po za klasami - łatniej czytelniej i łatwiejsze w utrzymaniu
2) ogólnie jak zaczniesz korzystać z metod konkretnej implementacji to już w niej ugrzęzłeś. Więc ma to nieco sensu. Im mniej tym łatwiej ewentualnie w przyszłości migrować. Mniejszy dług technologiczny
3) DTO ogólnie to tak - nie do końca są antypaternem, ale jak już idziesz w domeny to raczej value object a nie DTO. Jak idziesz w lekkie modele to raczej nie domenowo - po prostu przepychanka między elementami. Ale jak możesz sobie przesłać jakiś element domenowy to dlaczego nie? Automatycznie aktualizuje Ci się model przy zmianach i nie ma opcji "a zapomniałem"
4) ogólnie jest to bardzo fajna struktura, ale czasami można od niej odejść. Ale jeśli Cię sytuacja nie przymusza to
  • Odpowiedz
@whoru:
1) tak, ciężej to znaleźć, nikt nie powiedział że się to nie rozrośnie i nie przyda gdzie indziej w przyszłości, jeśli są tak powiązane no to trzymaj je w tym samym pakiecie z dostępem pakietowym.
2) powinno się operować na abstrakcji a nie implementacji więc się zgodze.
3) jeśli jest jakaś duża encja i do pewnej metody chcę np tylko 3 pola, to lubię zrobić POJO i mappera, bo
  • Odpowiedz
@whoru:

2. Co masz na mysli przez używanie Hibernate? HibernateCriteria? Jeśli tak to ma rację chociażby dlatego, że od Hibernate 5 są oznaczone jako Deprecated i zaleca się przejście na JPA

Ale co do zasady - JPA to specyfikacja, Hibernate to implementacja więc ciężko używać JPA bez czegoś co je implementuje
  • Odpowiedz
@whoru: 1.) to zalezy ale raczej prawda
2.) Dobre praktyki mówią, aby korzystać z ogólnej abstrakcji, a nie konkretnej implementacji. W tym wypadku Hibernate to tylko implementacja JPA, co prawda hibernate dodaje kilka swoich metod, ale i tak w praktyce korzysta się tylko z metod JPA zaimplementowanych przez Hibernate, więc ten punkt jak najbardziej zasadny.
https://www.quora.com/When-is-it-better-to-use-JPA-than-Hibernate-and-or-vice-versa-for-ORM
3.) Jeżeli tworzysz do tego specjalne klasy (boiler code) to prawda. Jeżeli korzystasz z
  • Odpowiedz