Java EE - początek nauki.

Java EE - początek nauki.
A0
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 2 lata
  • Postów:29
0

Witam,
Aktualnie uczę się podstaw Springa z tej strony https://www.tutorialspoint.com/spring/index.htm

Prosiłbym o informację zwłaszcza od osób, które zawodowa pracują jako programiści Javy, co wybrać na początek nauki, jakie obrać kierunek.
Co aktualnie jest wykorzystywane w Javie EE.

Pozdrawiam.

jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
3

Zawodowo programuję w JavaEE (juz 17 rok) proponuję abyś nie uczył sie tej technologii. Chyba, ze jakoś interesujesz sie archeologią.. W kategorii pieniedzy Cobol nadal przyniesie Ci wiecej, a wstyd moim zdaniem mniejszy.
Sama Java jest OK. Co do springa zdania są podzielone. Ja lubię tylko nowe kawałki ze Spring 5. Ale to co się uczysz jest szeroko używane i jest standardem. Da sie z tym żyć.

Btw JavaEE nie jest zupełnie martwe oczywiście - technicznie to Spring opiera sie o wiele standardów JavaEE i jest kompatybilny.
Natomiast żeby opisać stan JavaEE - to wystarzy jedno słowo ZombiEE. Nadal się rusza, ale nie spodziewaj się po tym nic dobrego. Jak Cię dopadnie - zeżre Ci mózg.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 4x, ostatnio: jarekr000000
Hispano-Suiza
A jaką technologię polecisz zamiast EE / Springa? :-)
jarekr000000
@Hispano-Suiza: Javę. Java jest całkiem OK.
TR
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 lata
  • Postów:731
0

to tego, tutorial jest stary... nie mam na myśli, że jest zły, nauczysz się podstaw lecz obecnie są wykorzystywane dekoratory w kodzie, zamiast plików xml - zależy też czego oczekujesz od Springa? Co chcesz robić? Chcesz robić projekty on-the-fly i je oddawać po 3 tygodniach na produkcję, czy idziesz w kierunku wielkich projektów, w których struktura musi być usystematyzowana i czytelna dla wszystkich (czyli struktura z xml)?
Wszystko ma swoje plusy i minusy.
Jeśli chcesz robić projekty i je sprzedawać na szybkości, to dorzuć sobie jeszcze Kotlina lub Scalę. Kotlin jest przyjemniejszy, bo nie wymaga kolejnych bibliotek etc, wystarczy plugin do IntelliJ.

Co aktualnie jest wykorzystywane w Javie EE.

nie bardzo rozumiem?


musica curat corpus at animam
edytowany 1x, ostatnio: trojanus
A0
  • Rejestracja:ponad 8 lat
  • Ostatnio:ponad 2 lata
  • Postów:29
0
trojanus napisał(a):

Co aktualnie jest wykorzystywane w Javie EE.

nie bardzo rozumiem?

Przeglądałem aktualne oferty pracy i pojawiają się różne technologie m.in: Spring framework, Hibernate, Angular itp.
I właśnie zastanawiam się na co zwrócić szczególną uwagę na początku, jak wiadomo nie możliwa jest nauka wszystkiego od razu.

Pomijam kwestie narzędzie typu Git, Maven (co jest standardem).
Znacie jakieś fajne tutoriale opisujące Springa(wiem, że jest rozróżnienie m.in na MVC, Web Service, Boot)

TR
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 lata
  • Postów:731
0

@Andrew00: to masz niewystarczające pojęcie. I mieszasz pojęcia.
MVC to jest wzorzec projektowy - proponuję poczytać na ten temat, bo to podstawa w Java/Spring lub JavaScript/TypeScript/Angular
W SpringFramework (Spring potocznie) wykorzystuje się wzorzec MVC.
Jeśli chodzi o Hibernate to jest to technologia, która umożliwia łatwą komunikację między Javą i SQL.
Angular to jest technologia frontendowa - czyli tylko po stronie przeglądarki.


musica curat corpus at animam
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

Użycie Spring w 2017 spadło - prawdopodobnie na rzecz Java EE 7 (które prawie o tyle samo wzrosło):
https://dzone.com/storage/assets/5911393-dzone-guidetojava-volumeiv.pdf
(strona 5)

PI
tylko dla userów DZone ;(
vpiotr
@Pinek: to chyba to https://dzone.com/guides/java-development-and-evolution - czasami coś fajnego dają. Zauważyłem że też Polacy się tam zaczęli udzielać.
PI
@vpiotr: Tak, DZone jest fajne i czytam tam artykuły ale nie miałem do tej pory potrzeby się rejestrować ;)
Hispano-Suiza
@vpiotr: fajny guide. Chętne poczytam, dzięki!
zyxist
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 6 lat
  • Postów:101
1

Wg mnie Hibernate'a warto znać niezależnie od własnych upodobań:

  1. wymagany prawie w każdej pracy, gdzie pojawia się Java, więc jest bardzo duża szansa, że się z nim zetkniesz,
  2. aby udało się przekonać innych do użycia innego rozwiązania, dobrze jest to podeprzeć doświadczeniem,
  3. jeśli już uda się przekonać innych i wdrażać coś innego, to dobrze jest znać alternatywne rozwiązania i wiedzieć, co i jak robić, by sobie ponownie nie strzelić w stopę.

S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0
vpiotr napisał(a):

Użycie Spring w 2017 spadło - prawdopodobnie na rzecz Java EE 7 (które prawie o tyle samo wzrosło):
https://dzone.com/storage/assets/5911393-dzone-guidetojava-volumeiv.pdf
(strona 5)

Invalid or corrupted PDF file. Ale szczerze mówiac @vpiotr jakoś ciężko mi sobie wyobrazić żeby ludzie odchodzi od Springa do JEE, zwłaszcza jak mamy Spring Boot i Spring DATA


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
Wibowit
jakie invalid? zalogowałem się do DZone, ściągnąłem i mam 4.3 MB PDFa.
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
1
scibi92 napisał(a):

Invalid or corrupted PDF file. Ale szczerze mówiac @vpiotr jakoś ciężko mi sobie wyobrazić żeby ludzie odchodzi od Springa do JEE, zwłaszcza jak mamy Spring Boot i Spring DATA

Adam Bien w połowie roku mówił mi, ze jest jakiś szał na nowe pojekty w JavaEE. Ma mnóstwo zapytań między innymi w Polsce. Sam się dziwił.

Co nie zmienia faktu, że to wynaturzenie, które powinno odejśc do lamusa. (embedded servers, liberty itp. też).

Springowcy przynajmniej ewoluują - dorabiają nowe dobre częsci - za jakiś czas tylko powiedzą wywalcie annotacje i będzie spoko.
Kiedyś już zupełnie bez żenady powiedzieli: wywalcie XML i przejdźcie na annotacje, mimo, że wcześniej strasznie tego XML promowali :-).
Wierzę w nich - pieniądz nie śmierdzi, a w konkurencji na najgłupszy framework wiedzą, że z JavaEE (którego część nadal stanowi JSF) nie mają szans.


jeden i pół terabajta powinno wystarczyć każdemu
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0
scibi92 napisał(a):
vpiotr napisał(a):

Użycie Spring w 2017 spadło - prawdopodobnie na rzecz Java EE 7 (które prawie o tyle samo wzrosło):
https://dzone.com/storage/assets/5911393-dzone-guidetojava-volumeiv.pdf
(strona 5)

Invalid or corrupted PDF file. Ale szczerze mówiac @vpiotr jakoś ciężko mi sobie wyobrazić żeby ludzie odchodzi od Springa do JEE, zwłaszcza jak mamy Spring Boot i Spring DATA

Tu nie trzeba używać wyobraźni. To są badania na jakiejś tam grupie ludzi (użytkownicy dzone), które mogą ale nie muszą się przekładać na cały rynek.
Zesztą nie udawajmy, wybór JEE nigdy nie był podyktowany tylko technicznymi aspektami.
Myślisz że w korpo dyrektorzy czy osoby decyzyjne myślą o tym w czym chciałbyś pracować?

S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

@jarekr000000: w jaki sposób promowali XML? Adnotacje pojawiły się po XML-u :) A frameworki IoC są generalnie popularne i duzo osób z nich korzysta nie tylko w Javie i jakoś nie widze żeby odchodziły do lamusa :P

@vpiotr no w sumie co do dyrektów IT masz rację. Kiedyś kolega opowiadiał że miał jakąs prostą statyczną strone HTML postawić... na jbossie :D :D :D


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
edytowany 1x, ostatnio: scibi92
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
0
scibi92 napisał(a):

@jarekr000000: w jaki sposób promowali XML? Adnotacje pojawiły się po XML-u :) A frameworki IoC są generalnie popularne i duzo osób z nich korzysta nie tylko w Javie i jakoś nie widze żeby odchodziły do lamusa :P

No dokładnie promowali zanim pojawiły się annotacje - Spring 2.0 ( pierwszy z którego korzystałem) wylazł jak annotacje były calkiem nowe java 5.0 dopiero wyszła, a firmy nadal siedziały na 1.4 i 1.3 - więc nawet nie bardzo mieli wyjście. Pokazywali jak cydownie wszystko skonfigurować można w XML. Dopiero Spring 3.0 to szał annotacji i powolne przesunięcie "marketingu" w stronę: wywalcie XML. (przy Spring 4 już totalnie).
A co do argumentu dużo osób korzysta. Ja też korzystam - nadal uważam, że to katastrofa. W swoim kodzie sobie tego nie robię, ale jak trafiam do projektu ze Springiem to po prostu staram się trochę poprawić jak gdzies coś mieszam (zwykle wywalając wiele beanów i robiąc z nich normalne klasy Javy), ale całkiem rewolucji nie robię.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 4x, ostatnio: jarekr000000
PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:3 miesiące
  • Postów:2787
0
jarekr000000 napisał(a):

W swoim kodzie sobie tego nie robię, ale jak trafiam do projektu ze Springiem to po prostu staram się trochę poprawić jak gdzies coś mieszam (zwykle wywalając wiele beanów i robiąc z nich normalne klasy Javy), ale całkiem rewolucji nie robię.

@jarekr000000 rozumiem że po takowej zmianie puszczasz pełno testów i sporo klikasz w apce żeby mieć pewność że nic nie zepsułeś?

edytowany 1x, ostatnio: Pinek
jarekr000000
Testy same się puszczają. Nic nie klikam. Gorzej niż w Spring działać i tak nie może. (btw. problem jest taki, że często wiele testów trzeba ruszyć - ale zwykle się mocno upraszczają).
PI
A czy macie otestowany każdy przypadek? :P obydwaj wiemy że raczej nie
jarekr000000
Zależy od aplikacji - ale nigdy nie mamy kazdego. Powtarzam, gorzej niż Spring i tak nie będzie. Przynajmniej udaje się z części testów wywalić głupie mocki.
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
0
Pinek napisał(a):
jarekr000000 napisał(a):

W swoim kodzie sobie tego nie robię, ale jak trafiam do projektu ze Springiem to po prostu staram się trochę poprawić jak gdzies coś mieszam (zwykle wywalając wiele beanów i robiąc z nich normalne klasy Javy), ale całkiem rewolucji nie robię.

@jarekr000000 rozumiem że po takowej zmianie puszczasz pełno testów i sporo klikasz w apce żeby mieć pewność że nic nie zepsułeś?

Jeżeli po wywaleniu kilku beanow springowych trzeba przeklikiwac całą aplikację bo mogło się coś popsuć to znaczy, że ta aplikacja już jest bardzo zepsuta.
Normalnie przerobienie kilku beanów na normalnośc to nie jest operacja na otwartym sercu i kod nawet tego prawie nie zauważa.

Ale jakies dwa lata temu dostaliśmy z zespołem takie ultra chore Springowe aplikacje, wszystkie klasy to beany (jeszcze o nazwach typu AbstractCustomerManagerServiceBeanImpl (ten Abstract z Impl na końcu to nie żart, co więcej te klasy nie były nawet abstrakcyjne). Testy całe na mockach - czyli zawsze zielone, nawet jak się kod wywaliło.... (za to pokrycie prawie 100%).
Przenosisz klasę z pakietu do pakietu i apka się sypie...

Z tych aplikacji to springa MUSIELIŚMY wywalić, tak się dalej żyć nie dało. (nie ze wszystkich modułów się opłacało - ale krytyczne wyczyściliśmy).


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
SP
może chodziło bardziej o "abstract customer" niż "abstract service impl"
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

No ale nazwanie ujowo klas to nie jest wina twórców Springa oO A wiele ludzi korzysta ze IoC bo lubią, i jest praktyczne.
Nadal mi ciezko wyobrazić aplikacje na 100 klas z logiką (nie mówie o jakiś DTO itp) i testowanie tego normalne. Zresztą jak przekazać do konstruktowa referencje, pisać 400 razy new? A Spring ułatwia testowanie, jak na przykład masz DataSource ustawiasz profil na test i masz inną baze danych, podnosisz konteks i normalnie wallsz requestami :) Ciekawe jak to przetestować lajtowo bez IoC, w 30 klasach podmieniasz String a url bazy danych? xD


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
2
scibi92 napisał(a):

No ale nazwanie ujowo klas to nie jest wina twórców Springa oO A wiele ludzi korzysta ze IoC bo lubią, i jest praktyczne.
Nadal mi ciezko wyobrazić aplikacje na 100 klas z logiką (nie mówie o jakiś DTO itp) i testowanie tego normalne. Zresztą jak przekazać do konstruktowa referencje, pisać 400 razy new? A Spring ułatwia testowanie, jak na przykład masz DataSource ustawiasz profil na test i masz inną baze danych, podnosisz konteks i normalnie wallsz requestami :) Ciekawe jak to przetestować lajtowo bez IoC, w 30 klasach podmieniasz String a url bazy danych? xD

Nie mam w 30 klasach URL do bazy danych... ale jesli Ty masz to Ci współczuję i powoli rozumiem dlaczego nie możesz sobie poradzić bez kontera IoC.
(btw. pewnie masz 30 razy wstrzyknięty PersistentContext - to ten sam rak tylko poziom dalej).

Kiedyś dawno temu (2001-2005) robiliśmy systemy w Javie, które juz były całkiem duże (na JavaEE głównie). Nie używaliśmy wtedy kontenerów IoC - Spring dopiero się rodził....
Nie mieliśmy 400 new, a testy mieliśmy. Te systemy oczywiście z dzisiejszej perspektywy są kiepskie. Ale programować tak, żeby poradzić sobie z zależnościami jeszcze umieliśmy - to dopiero potem nadszedł rak i Javowcy się oduczyli.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 3x, ostatnio: jarekr000000
0

musicie być bardzo interesujący na imprezach

herbatek
  • Rejestracja:prawie 8 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Rzeszów
  • Postów:71
0

Hej, widzę dyskusja trwa w najlepsze, więc pozwolę sobie zdać małe pytanie - aby nie tworzyć kolejnego małego tematu.
Rozumiem, że konfiguracje XML to już daleka przeszłość, więc teraz używa się adnotacji javy czy "Configuration with Java Code" czy może jeszcze w inny sposób ?

zyxist
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 6 lat
  • Postów:101
0

Generalnie inwestuj czas w naukę pisania czystego, zrozumiałego kodu, który działa nawet, jak się go wyjmie z konkretnego frameworka. Tak naprawdę o to się cała dyskusja rozchodzi.

Jeśli pilnujesz tego, żeby np. potrzebne klasie zależności wrzucać wyłącznie przez konstruktor, żeby nie robić metod z ogromną liczbą argumentów (ale np. ograniczyć się do czterech), to Ci w pewnym momencie samo wyjdzie, gdzie potrzebne są adnotacje (albo gdzie się przydają), a gdzie zupełnie dobrze spisuje się zwykły kod Javy.

Ja osobiście właśnie tak robię w swoich aplikacjach i tego też uczę ludzi w zespole. Klasy mają tylko po kilka zależności, wszystkie da się łatwo wrzucić przez konstruktor. Singletony i pola static non-final są zabronione, większość klas ma niezmienny stan. Cały kod jest tak napisany, że można go poskładać, tworząc ręcznie obiekty i wrzucając w odpowiednie miejsca (co jest weryfikowane testami, które składają jakiś określony fragment systemu "na piechotę"). Jednocześnie korzystam z adnotacji @Inject tam, gdzie widzę, że to ma sens, bo robi dokładnie to, co chcę, żeby zrobiło*. Nie traktuję frameworków, ani narzędzi jako złotej kuli rozwiązującej wszystkie problemy. Efekt? Ludzie chwalą sobie tak napisany kod, chcą z nim pracować i mówią, że to ich rozwija. I w jakimkolwiek by frameworku nie zastosować tych zasad, one działają.

    • zgadzam się, kontenery IoC mogą uczyć pisania magicznego kodu, bo dają sporo narzędzi, których niewłaściwe użycie pozwala strzelić sobie w stopę. Odkryłem to na bazie obserwacji własnego kodu, kiedy poznawałem Guice'a lat temu parę. Taka sytuacja pojawia się, kiedy mamy narzędzie robiące X i używamy go do robienia X bez zastanowienia się, PO CO to X chcemy zrobić i po co to właściwie powstało - takie robię coś, bo mogę... a potem jeszcze do robienia Y i Z (bo mogę).

edytowany 3x, ostatnio: zyxist
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
0
zyxist napisał(a):

Generalnie inwestuj czas w naukę pisania czystego, zrozumiałego kodu, który działa nawet, jak się go wyjmie z konkretnego frameworka. Tak naprawdę o to się cała dyskusja rozchodzi.

Podpisuje się pod całym postem - z jednym tylko zastrzeżeniem. Jak chcę robić serwery HTTP lub obsługę zgodnie z JavaEE/Spring ... to moim zdaniem tego się nie da zrobić czysto. Ten kawałek jest zawsze brudny (co gorsza niepotrzebnie). Tu sa Beany Injecty, Aspekty i inne bzdury...
Ale da się mi mo to jakoś żyć i tak własnie najczęściej w różnych projektach musze robić. I tak nie da się ich ( politycznie) wyciągnąć z websphera.

Jakkolwiek moim zdaniem - to najlepiej od tego syfu się całkiem odciąć.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

@jarekr000000: no też nie mam, mam w jednej. Ale wyobraź sobie że masz na przykład klase A która zależy od klasy B a klasa B od klasy C
w tym momencie musisz w main zrobić tak:

A a = new A(new B (new C()))

A IoC to nie jest magia jak ktoś umie IoC. Większośc programistow generalnie nie umie dobrze programować więc stąd się rodzą problemy


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
edytowany 3x, ostatnio: scibi92
Interpod
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 2 lata
  • Postów:81
0

Chętnie bym zobaczył przynajmniej fragment kodu aplikacji webowej, która ma klasy javove zamiast beanów (hmm przecież beany to POJO z annotacją). Jak przebiega flow czymś takim? Ciekawa dyskusja się zapowiada, no ale pisanie ze coś jest ujowe bo tak jest i tyle, albo ze jest ujowe bo ktoś kto to pisał jest cymbałem jest kompletnym absurdem. Jakieś solidne argumenty ? Chętnie bym przeczytał, dlaczego spring, ioc, beany to zuo. Jakieś linki?

Btw jakiś czas temu natknąłem sie na aplikacje baaaardzo starą w baardzo starej javie. Bylo JEE i 0 beanów. Cały flow polegał na przekazaniu dalej obiektu request w trakcie zmieniając jego stan. Czy coś takiego chcielibyście zobaczyć?

XL
Patrzę w tą apkę i widzę tam lambdy po kilka linijek - jak to się ma do tego: http://blog.agiledeveloper.com/2015/06/lambdas-are-glue-code.html
jarekr000000
@xLatency: dobra uwaga - też się zastanawiam. Ja sie juz przyzwyczaiłem i przestałem aż tak bardzo wyodrębniać lambdy. Ale nie wiem - może warto by je powydzielać.
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
0
Interpod napisał(a):

Chętnie bym zobaczył przynajmniej fragment kodu aplikacji webowej, która ma klasy javove zamiast beanów (hmm przecież beany to POJO z annotacją). Jak przebiega flow czymś takim? Ciekawa dyskusja się zapowiada, no ale pisanie ze coś jest ujowe bo tak jest i tyle, albo ze jest ujowe bo ktoś kto to pisał jest cymbałem jest kompletnym absurdem. Jakieś solidne argumenty ? Chętnie bym przeczytał, dlaczego spring, ioc, beany to zuo. Jakieś linki?

https://blog.softwaremill.com/the-case-against-annotations-4b2fb170ed67
https://www.slideshare.net/holograph/slaying-sacred-cows-deconstructing-dependency-injection

Btw jakiś czas temu natknąłem sie na aplikacje baaaardzo starą w baardzo starej javie. Bylo JEE i 0 beanów. Cały flow polegał na przekazaniu dalej obiektu request w trakcie zmieniając jego stan. Czy coś takiego chcielibyście zobaczyć?

Raczej nie - stare JavaEE też miało pełno beanów EJB, tylko akurat nie było annotacji. Można powiedzieć, że były wszystkie wady posiadania kontenera i żadnych zalet.
Przekazywanie obiektu Request - masakra. Chociaż znam jeszcze gorszą patologię - niejawne przekazywanie Request (a raczej wpuszczanie danych w ThreadLocal): w postaci na przykład używania beanów Request Scoped. To dopiero jest mentalny fuck jak się śledzi skąd metoda bierze dane o użytkowniku, mimo że nikt ich do niej nie przekazuje.


jeden i pół terabajta powinno wystarczyć każdemu
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 3 godziny
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4707
0
scibi92 napisał(a):

@jarekr000000: no też nie mam, mam w jednej. Ale wyobraź sobie że masz na przykład klase A która zależy od klasy B a klasa B od klasy A
w tym momencie musisz w main zrobić tak:

A a = new A(new B (new C()))

NIe musze, bo ja takich głupot nie piszę. Już Ci z 5 razy podawałem kod przykładowej aplikacji (jest nawet w tym wątku) - idź i zobacz gdzie tam są te tony new. Popraw na Springa jak potrafisz i znajdziesz gdzieś gdzie warto. Może przyjmę pull requesta :-)


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 1x, ostatnio: jarekr000000
hcubyc
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 2 lata
1
scibi92 napisał(a):

@jarekr000000: no też nie mam, mam w jednej. Ale wyobraź sobie że masz na przykład klase A która zależy od klasy B a klasa B od klasy A
w tym momencie musisz w main zrobić tak:

A a = new A(new B (new C()))

A IoC to nie jest magia jak ktoś umie IoC. Większośc programistow generalnie nie umie dobrze programować więc stąd się rodzą problemy

Ależ oczywiście, że nie musisz. I tak da się pisać aplikacje na więcej niż 100 klas i korzystać głównie z new i testować normalnie. W bardzo prosty sposób - wystarczy korzystać z modularyzacji. Na dany moduł (bounded context jak ktoś lubi) robisz jedną klasę konfiguracyjną w springu i tam metody oznaczone jako Bean, ale tylko te, które musisz. Resztę normalnie tworzysz przez new i tak powiedzmy, że masz obiekt, który potrzebuje X zależności z zewnatrz(innego modułu np) to leci po autowired przez parametry, a resztę wewnątrz tworzysz sam. Wtedy testowanie jest bajką, bo nie testujesz klasy X, tylko wywołujesz sobie konfigurację np abcConfig.getX() - opcjonalnie podając parametry, które są wymagane. I większość kodu da się pokryć unit testami.


Limitations are limitless > ##### Ola Nordmann napisał(a)
> Moim językiem ojczystym jest C++ i proszę uszanować to, że piszę po polsku.
edytowany 1x, ostatnio: hcubyc
zyxist
  • Rejestracja:ponad 7 lat
  • Ostatnio:około 6 lat
  • Postów:101
1

@scibi92 -> jeśli masz klasę A zależną od klasy B, która zależy od A, to to jest problem z designem obu klas. Może to oznaczać, że próbujesz rozbić na dwie klasy kod, który wybitnie powinien być w jednej, albo że jedna z klas zajmuje się czymś, czym wybitnie nie powinna się zajmować. Albo że tylko wydaje Ci się, że one muszą być ze sobą powiązane. Zupełnie przypadkiem niedawno dostałem identyczne pytanie związane z pewnym kawałkiem kodu. Aby rozwiązać problem, wystarczyło sprawić, by klasa B nie wiedziała, że gada z A, bo po drodze był interfejs. Innymi słowy, przemodelowałem problem, by sprowadzał się do zagadnienia "klasa B zależy od czegokolwiek, co potrafi dostarczyć jej potrzebne informacje", a potrzebną instancję dostawała po prostu jako argument metody, która miała coś policzyć. I problem się rozwiązał.

@Interpod -> zgadzam się, że argumentacja "coś jest krzywe, bo jego autor jest cymbałem" to nie jest żadna argumentacja, a niektóre posty mogły tak wyglądać. Jednak pojawiło się też trochę merytorycznych argumentów w całej dyskusji. Próba kompletnego opisu wymaga napisania artykułu i chyba w niedługim czasie do stworzenia takowego siądę, skoro jest potrzeba. Tutaj zasygnalizuję tylko kilka ważniejszych myśli:

  1. "przecież beany to POJO z annotacją" - to zależy od tego, do czego ta adnotacja Ci służy. Jeśli adnotacja sprawia, że niepozorna klasa zmienia się nagle w kombajn, który potrafi np. zarządzać transakcjami i robić inne ciekawe rzeczy, to zauważ, że to wtedy przestaje być POJO. Dlaczego? Bo to "POJO" nie jest w stanie istnieć i funkcjonować bez towarzyszącego mu silnika, który się tą adnotacją zajmie. Zabierzesz silnik, klasa jest niefunkcjonalna, albo działa zupełnie inaczej.
  2. w protokole HTTP chodzi o to, by odebrać żądanie, popatrzeć, co w nim siedzi i na tej podstawie wygenerować odpowiedź. Taka aplikacja musi na starcie stworzyć kilka obiektów opisujących "świat aplikacji", otworzyć połączenie sieciowe i czekać na chętnych do pogadania. Czy jest coś trudnego w tej koncepcji? Wg mnie nie ma - programy działające na podobnej zasadzie tworzą studenci na drugim roku studiów w ramach zajęć. Problem, który rozwiązują frameworki, to po prostu odpalenie potrzebnych serwisów i zaproponowanie programiście jakiegoś sposobu opisania, jak przetworzyć żądanie na odpowiedź. Jeśli nie znasz/nie rozumiesz problemu, który rozwiązuje dane narzędzie, to wszystko, co robisz, odnosisz do narzędzia i przestajesz sobie radzić w momencie, gdy narzędzie zaczyna Cię ograniczać (a prędzej czy później taka sytuacja się trafi).

Podam Ci przykład, jak można stać się niewolnikiem narzędzia. Był sobie kiedyś taki framework webowy Apache Wicket. Jego ideą było to, aby aplikacje webowe pisało się podobnie, jak aplikacje okienkowe. Innymi słowy, miałeś komponenty ze swoim stanem, który trzymany był w sesji, a framework sam zarządzał, by w przeglądarce wszystko się odświeżało. Brzmi obiecująco, prawda? Kłopot w tym, że framework - próbując rozwiązać problem tworzenia aplikacji webowych - próbował zrobić z protokołu HTTP coś, do czego ten nigdy nie był projektowany. Po prostu styl tworzenia aplikacji desktopowych i webowych to dwa różne światy. Z jednej strony framework niby separował Cię od całej warstwy webowej, z drugiej - i tak nie mogłeś jej uniknąć, bo wyciekała ona w wielu miejscach, powodując zgrzyty (np. sesja ważąca kilkadziesiąt megabajtów). A gdy na taki zgrzyt trafiłeś, to trudno było coś na to poradzić, bo... byłeś niewolnikiem filozofii narzędzia, która się nie sprawdzała i byłeś zdany na jej łaskę bądź niełaskę. Ten sam problem, tj. tworzenie aplikacji webowych, można było rozwiązać w inny sposób: nauczyć się podstaw protokołu HTTP oraz podstaw tworzenia front-endów i backendów. Ilość wiedzy do zdobycia podobna, a efekt końcowy o wiele lepszy.


edytowany 1x, ostatnio: zyxist
SP
Nie używałem nigdy Wicketa ale brzmi zupełnie jak opis JSF
zyxist
Zgadza się - ja po prostu z Wicketem musiałem trochę popracować, a z JSF-em miałem bardzo krótką styczność raz w trakcie studiów, więc piszę o tego typu technologiach w oparciu o doświadczenia z tym pierwszym.
KK
Brzmi dokładnie jak opis Oracle ADF. Z tą różnicą, że wyklikiwanie aplikacji w ADFie można szybko się nauczyć, dużo szybciej niż tworzenie front i backendów
SP
@kkojot: ADF to JSF, może trochę zmodyfikowany
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

@jarekr000000: @zyxist doszło do pomylki miało być A od B i B od C. Na tak idiotyczny pomysł jak A zalezne od B i B zależne od A to bym nie wpadł :D


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:3 miesiące
  • Postów:2787
0

@scibi92: Fakt faktem że jeśli klasa A zależy od B, która to zależy od C, to ostatecznie musisz mieć tak czy siak instancje klas B i C. Jednak wydaje mi się że nie musisz tego robić w konstruktorze - może później, setterami? No chyba że faktycznie nie można stworzyć obiektu A bez obiektu B, albo że chcemy osiągnąć niemutowalność

edytowany 1x, ostatnio: Pinek
S9
  • Rejestracja:ponad 10 lat
  • Ostatnio:5 miesięcy
  • Lokalizacja:Warszawa
  • Postów:3573
0

Używanie setterów do prawdziwych obiektów (nie mam ma myśli jakiś opakowań na dane) to droga na onkologie jak dla mnie :)


"w haśle <młody dynamiczny zespół> nie chodzi o to ile masz lat tylko jak często zmienia się skład"
PI
  • Rejestracja:ponad 9 lat
  • Ostatnio:3 miesiące
  • Postów:2787
0

@scibi92: A gdyby tak nie mieć setterów, i żeby klasa A nie miała w ogóle pola o typie B? Jeżeli obiekt A potrzebuje obiektu B dla zrobienia czegoś, to może zróbmy metodę w klasie A, która jako argument przyjmuje obiekt klasy B?

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)