Wpis z mikrobloga

@PanJanuszTrzeci: mam 6 encji i do każdej muszę pisać interfejs DAO, implementacje, a później serwisy, implementacje i zastanawiam się, czy nie zrobić od razu implementacji serwisu bez interfejsów, ale zadanie będzie oceniane i nie wiem, czy nie uznają tego za coś niewłaściwego
  • Odpowiedz
@YourDoom: Nikt ci nie zabroni, aczkolwiek może to doprowadzić w przyszłości do uciążliwych zmian. Załóżmy, że korzystasz sobie z EntityManagera jako DAO, ale po pewnym czasie zechcesz przerzucić się na Spring Data i korzystać z repozytoriów. Refaktoryzacja tego będzie żmudna i upierdliwa.
  • Odpowiedz
@YourDoom: Ważne, żeby mieć świadomość, że nie jest to najlepsze rozwiązanie. Mimo wszystko warto sobie wyrobić nawyki, bo to, co wydaje się boilerplate codem, może uratować kiedyś dupę ( ͡° ͜ʖ ͡°)
  • Odpowiedz
Czy w małych programach można pominąć warstwę DAO i od razu w serwisach wykonywać logikę JPA i zapisywać, usuwać itd encje? Jest to dobre, czy uchodzi za złą praktykę?


@YourDoom: Niczego dobrego się z tego nie nauczysz, a skoro to mały program to zysk na LOCach też niewielki. Tak więc można ale nie warto.
  • Odpowiedz
To cecha programisty, który robi coś na #!$%@? i przez to że ktoś zaoszczędził 5 minut to później trzeba będzie zmarnować kilka godzin, żeby to naprostować xD


@LazyInitializationException: No to teraz piszesz o głupocie a nie lenistwie. Można być i leniwym i nie być idiotą. Z mojego doświadczenia wiem, że wtedy powstaje najlepszy kod, jest go mało/feature, ale na tyle dużo żeby nie generować długu a o to przecież głównie chodzi.
  • Odpowiedz
Znam leni, którym się nie chciało odpowiedniej abstrakcji zrobić i później mała zmiana rozlewa się na 50 innych plików zamiast na jeden


@LazyInitializationException: Spoko. Kwestia nazewnictwa. W moim przypadku, jeśli ktoś ma chociaż odrobinę doświadczenia i tak robi to jest przede wszystkim głupi. Ty natomiast uważasz, że głównie wynika to z lenistwa. Może po prostu masz w sobie więcej wiary w ludzi.
  • Odpowiedz
@63274682374: ciężko mówić o głupocie w dziedzicznie, gdzie jedyne co się liczy to czytelność i utrzymywalność kodu. Jak klepiesz CRUDa, który zamienia JSONa na bazę i w drugą stronę to często nie ma to znaczenia czy robisz mapowania na model domenowy, który wygląda 1:1 jak DTO czy nie. Łamanie ogólnie przyjętych zasad w celu osiągnięcia pewnych zysków wymaga dużej wiedzy, doświadczenia i intuicji. Nie wiem, czy po 30 latach klepania ciężkich
  • Odpowiedz
ciężko mówić o głupocie w dziedzicznie, gdzie jedyne co się liczy to czytelność i utrzymywalność kodu


@Saly: No, ale właśnie w tym problem. Głupotą jest właśnie tego nie wiedzieć, albo większą wiedzieć i ignorować.

Piszesz:

Łamanie ogólnie przyjętych zasad w celu osiągnięcia pewnych zysków wymaga dużej wiedzy, doświadczenia i intuicji.


@Saly: Jasne. Trudno się z tym nie zgodzić. Problem polega na tym, że większość takich "złamań zasad" nie wynika z
  • Odpowiedz
@YourDoom: piszesz o encjach i JPA, więc nie za bardzo jesteś w stanie pominąć warstwę DAO, bo Twoim DAO jest de facto EntityManager. Pytanie powinno więc raczej brzmieć, czy opakowywać to DAO (EntityManagera) w kolejną warstwę, np. repozytoriów. IMHO jeżeli Twoje repozytoria miałyby się sprowadzać tylko do tego, żeby wołać pojedyncze metody EntityManagera, to nie ma to większego sensu, bo czy w serwisie wywołasz entityManager.persist(), czy repository.save() wiele nie zmienia. Gdybyś
  • Odpowiedz
@Eoghan: kilka stron dyskusji i w końcu głos rozsądku. Dzięki. Zawsze wprowadzając jakaś abstrakcję należy sobie odpowiedzieć na pytanie - jaki problem ona ma rozwiązać i czy faktycznie ten problem musimy rozwiązywać już teraz. Bo jak nie, to YAGNI.
  • Odpowiedz