Hirdetés

2024. május 30., csütörtök

Gyorskeresés

Útvonal

Fórumok  »  Szoftverfejlesztés  »  Java programozás (kiemelt téma)

Hozzászólások

(#11051) hcl válasza mobal (#11050) üzenetére


hcl
félisten
LOGOUT blog (1)

Ez már megy, de köszi :)
Egyszerűbb volt : két static class között szépen lehet hívni (simán meg kellett hivatkozni class.metódus formában, és megy). Ott akadtam el, hogy az összes RunOnUIThread-os toast-ot ez kiüti, mert static classból a nem static MainActivity-t kéne elérni. Ezt hogy lehet áthidalni?

Mutogatni való hater díszpinty

(#11052) mobal válasza hcl (#11051) üzenetére


mobal
MODERÁTOR

Lehet nem teljesen értem mit akarsz csinálni pontosan, de nem jó ötlet thread-ből threadeket hívogatni.

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#11053) hcl válasza mobal (#11052) üzenetére


hcl
félisten
LOGOUT blog (1)

Két külön probléma volt.
Van egy Activity-m (Android), ami indít 2 szálat (kamerához, Bluetooth-hoz, és ezek külön classban is vannak). Egy bajom az volt, hogy nem tudtam, hogyan kell meghivatkozni a másik szálban levő metódust (azaz hogy a kamera szál által feldolgozott kép alapján adatot küldjek BT-n). Ez már megy.
Ehhez a BT szálat (is) statikussá kellett tenni. Viszont így meg nem tudom, hogyan lehetne toast-ot küldeni az UI-ra, mert az Activity nem statikus, (nem is lehet az) így aztán a RunOnUIThread nem igazán működik. De akkor hogyan lehet? :S

[ Szerkesztve ]

Mutogatni való hater díszpinty

(#11054) mobal válasza hcl (#11053) üzenetére


mobal
MODERÁTOR

Erre linkeltem az mqt. Csinálsz egy képet, majd küldesz egy vagy két üzenetet. Nem indítasz feleslegesen szálat csak reaktiválni cselekszel. 😀

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#11055) hcl válasza mobal (#11054) üzenetére


hcl
félisten
LOGOUT blog (1)

Na de a Mainactivitynek hogyan küldök üzenet...?

Mutogatni való hater díszpinty

(#11056) hcl válasza mobal (#11054) üzenetére


hcl
félisten
LOGOUT blog (1)

OK, csináltam egy handlert, amit szépen meg tudok hívni a statikus thread-ekből, megkapja a message-t is. Merthogy a handler is static kell legyen, különben nem lehet meghívni.
De mivel static, még mindig nem lehet belőle meghívni egy toast-ot...

...amint leírtam, elkezdett működni. A getcontext() hiába nem tetszik az IDE-nek, működik :S

[ Szerkesztve ]

Mutogatni való hater díszpinty

(#11057) bandi0000 válasza hcl (#11056) üzenetére


bandi0000
nagyúr

getContextre csak a null-t írja nem? Droid fórumban nekem adtak rá egy jó megoldást, bàr régebbi appomnàl sehol nem vizsgàltan, hogy null e és nem hallt le :D

Xbox One: bandymnc

(#11058) hcl válasza bandi0000 (#11057) üzenetére


hcl
félisten
LOGOUT blog (1)

??? Nem, panaszkodik az IDE, hogy az úgy nem jó. Viszont most lefordul, meg is jelennek az üzenetek.

static Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
String message = (String) msg.obj; //Extract the string from the Message
Log.d("FCKK:","Handler called w/ " + message);
Toast.makeText(getContext(),message, Toast.LENGTH_SHORT).show();
} };

public static void showToast(String text) {
Message msg = Message.obtain(); // Creates an new Message instance
Object message;
msg.obj = text; // Put the string into Message, into "obj" field.
msg.setTarget(handler); // Set the Handler
msg.sendToTarget(); //Send the message
Log.d("FCKK:",text);
}

Ami még fura : külön szálon fut a kamera és a BT. Elforgatom a telefont, a kameraképet mire elforgatja, az egy kis idő, egyből eldobja a BT-t... Semmi közük egymáshoz, logban sincs semmi. Visszafordítom, és megy tovább.
Mondjuk a forgatásra nem nagyon van szükség, ki kéne vakarni.

[ Szerkesztve ]

Mutogatni való hater díszpinty

(#11059) bandi0000 válasza hcl (#11058) üzenetére


bandi0000
nagyúr

Java-ban szokott rá nyavajogni, hogy a getContext lehet, hogy nulla, ezért hibát okozhat, persze ettől még lefordul a program

Azt nem tudom, hogy attól van e, de a forgatás nulláz mindent, erre vannak különböző praktikák, amivel el lehet menteni az állapotot

Amúgy meg a Manifest-be tudod beállítani az alapértelmezett nézetet
android:screenOrientation="portrait"
android:screenOrientation="landscape"

[ Szerkesztve ]

Xbox One: bandymnc

(#11060) hcl válasza bandi0000 (#11059) üzenetére


hcl
félisten
LOGOUT blog (1)

Nem az a baja, hanem hogy nem lenne szabad hívni, csak ugyanabból a library contextből, azaz a CameraX library-ból. Ehhez képest működik.

A forgatás a képernyőt még érteném, hogy nullázza, de egy tök független thread miért döglik el tőle... A kamerás thread meghívja a BT-t jelenleg másodpercenként egyszer.

A forgatást meglátom, hogyan tiltom, mert az UI szempontjából jó lenne, de szerintem a Textureview-t nem kéne forgatni. Fekvő telónál fekvő kép lenne rajta...

[ Szerkesztve ]

Mutogatni való hater díszpinty

(#11061) hcl


hcl
félisten
LOGOUT blog (1)

Hello,

Hazsnált már valaki CameraX -et?
Ilyent kellene alkotnom, hogy CameraX -et használó alkalmazásban a kamera paraméterit állítgatni.

Alsó hangon ott akad el a dolog, hogy nem tudom ezeket importálni :
import androidx.camera.camera2.interop.Camera2Interop;
import androidx.camera.camera2.interop.ExperimentalCamera2Interop;
Hogy lehet megmagyarázni a fordítónak (AndroidStudio alatt), hogy ezeket húzza be...?

Köszi minden segítséget :)

Mutogatni való hater díszpinty

(#11062) Create.


Create.
addikt

Sziasztok!
Érdeklődnék, hogy a greenfox vagy a progmasters java fullstack képzésről mi a véleményetek? Adhat annyi tudást, hogy juniorként el lehessen vele helyezkedni?
köszi előre is! :R

(#11063) mobal válasza Create. (#11062) üzenetére


mobal
MODERÁTOR

Nem.

Ezt ne úgy fogd fel, hogy mondjuk végigcsinálsz egy tanfolyamot és rendelkezel megfelelő tudással, hogy junior lehess. Ez nem egy olyan munka ami határok közé van szorítva, és nem hiszem, hogy fél vagy egy év alatt a gondolkodás módot el lehet sajátítani.

Ez az én véleményem. :D

[ Szerkesztve ]

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#11064) axioma válasza mobal (#11063) üzenetére


axioma
veterán

Hat, reszben ertek egyet. Marmint a gondolkodasmodot onmagaban nehez egy ilyen tanfolyamon megszerezni, de az az erzesem hogy ezek a cegek pont azokat probaljak felvenni, akiknel mar van valami analitikus/algoritmikus gondolkodas, arra epitik ra a konkret programozasi tudast, processzt.
Tehat annak javasolhato a tanfolyam, akit amugy is erdekel, kozel all hozza ez a fajta munka (nem a penz miatt), van alapja (mintha csak diplomaval vagy annak kozeli multtal vennenek fel), es hajlando a tanfolyam honapjait csak erre forditani (nem csak esti muszakban tolja at a sajat melojat hogy ne utkozzon, hanem adott esetben este is nekiall kodolni). Ha ez megvan, akkor szerezhet junior szintet, bar nekem nagyon fura hogy miert fullstack-eznek, akkor feluletesebb, mindenbol kevesebb tudas/gyakorlat lesz.
Egyebkent van olyan ismeros aki elegge mas iranyu diplomaszerzes korul vegigcsinalt egy progmat felvetelit, ahhoz ugye info erettsegit (bar asszem kozepszint eleg volt neki), epp halaszt de gondolkodik egy ilyen tanfolyamba atugrasban. Es me'g ot se biztos, hogy felvennek. Szerintem - most meg plane - van annyi jelentkezo, hogy aki bejutott, arra mar igaz lehet hogy eleg valoszinuen kepes lesz junior lenni a vegen. De ez nem azt jelenti, hogy aki kitalalja hogy kiprobalna, az fel ev mulva kesz junior.
Persze tevedhetek en is, de ezzel a felteteles moddal egyutt en hihetonek tartom mar.

(#11065) Create. válasza mobal (#11063) üzenetére


Create.
addikt

2017-ben kezdtem pti-t levelezőn, de az elvárás meg van, viszont tanítani kb semmit se tanítanak. Közben az élet úgy hozta, hogy 1év passzívra kellett tennem magam, ezért most a webleren keresztül webmesternek tanulok. Nem légből kapott ötlet ez, csak magamtól nem minden világos és ezért gondoltam ilyenre is.

(#11066) mobal válasza Create. (#11065) üzenetére


mobal
MODERÁTOR

Ha van affinitás akkor vágj bele. Én csak a saját "tapasztalatomat" osztottam meg. Egyetemet végzett mérnökként állítom, hogy semmi lényegeset sajnos nem tanítottak nekem amit most használnék. :)

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#11067) Create. válasza mobal (#11066) üzenetére


Create.
addikt

Köszi szépen a választ mindkettőtöknek. :R

(#11068) fatal` válasza Create. (#11065) üzenetére


fatal`
titán

Szakámban dolgozó, egyetemet otthagyóként hasonlót tudok mondani mint mobal. :) Semmit nem tanítanak ott, amit egyébként ne tudnál megtanulni és az átlag melóhoz kellene. Persze vannak területek, amihez kell az egyetemi tudás (matekra gondolok, nem az info részére, utóbbi szerintem könnyebben tanulható egyedül), de ez szerintem kevés területet érint.

Szerintem ehhez a munkához a legfontosabb (a logikus gondolkodáson túl) a hozzállás és az, hogy érdekeljen. Azok közül, akiket csak a pénz motivál, eddig csak kókányolóművészekkel találkoztam.

(#11069) -Faceless-


-Faceless-
őstag

Sziasztok!

Számológépet csinálok, és bajban vagyok a string parsing-al. Minél többet gondolkodok rajta annál jobban túlbonyolítom...
Neten keresve, vagy csak kétszámos megoldásokat találok amiben nincs is parsing, vagy visszadob a 120 ezredik split() pont mentén leíráshoz.
Tudnátok esetleg ajánlani valamilyen referenciát/példát ahol bármi hasonló megvan valósítva? Szóban is bőven elég lenne, csak hogy nagyjából milyen módszerrel lenne szépen megoldva.

Egy kis rant: nyakamba varrtak egy számológépet amiben minden alapműveletnek, sin, tan cos, asztali, és webes nézettel aminek azonos adatbázisa van, működjön minden fő számrendszerben, minden alap mértékegységet váltson át, és API-n keresztül menjen a valuta váltás.
Mindeközben mások nyamvadt amőbát csinálnak meg recepkönyvet. String in, save click, és csókolom.

[ Szerkesztve ]

(#11070) mobal válasza -Faceless- (#11069) üzenetére


mobal
MODERÁTOR

Problémás kód részletet tudnál szolgáltatni?

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#11071) axioma válasza -Faceless- (#11069) üzenetére


axioma
veterán

Mit szeretnel parse-olni? Ha jol ertem akkor a tied a frontend. Ha meg igy van, akkor a gombnyomasok tulajdonkeppen megcsinaljak neked a tokenizalast, sot tulkepp rogton a kifejezesfat is felepitheted mindig ahogy jon a kovetkezo gombnyomas (nyilvan szamoknal a szamjegyeket erdemes a frontenden osszevarni es 1x konvertalni). De mar csak azert is igy erdemes mukodnie mert a szamologep a reszeredmenyt altalaban mar irja.
Vagy valamit nem ertek jol.

(#11072) -Faceless- válasza axioma (#11071) üzenetére


-Faceless-
őstag

Enyém minden frontend backend ahogy van.
Most hogy mondod igen ennek több értelme van. Én teljesen úgy gondolkodtam, hogy a műveleti mezőnek TextField-nek kell lennie, és ha mondjuk becopy-zod a "4*(3+sin(12))"-t akkor nincs gombnyomás ami mentén felosztod a műveleteket meg nyeljen le üres zárójelet ilyenek.
De akkor "csak" össze kellene foltoznom egy reguláris kifejezést amivel szétbontom, és műveleti sorrendben végigmegyek tömbbön.

Semmis akkor a kérdés, csak évek óta nem csináltam ilyesmit, és túl későn este akartam hozzákezdeni. Inkább le is tagadom, hogy hozzákezdtem volna megy a letagadom kupacba.

(#11073) floatr válasza -Faceless- (#11072) üzenetére


floatr
veterán

Na most javíts ki ha rosszul értelmezem, de te egy kifejezés kiértékelőt akarsz írni? Mert az azért nem annyira triviális... bár az amőba sem

(#11074) axioma válasza -Faceless- (#11072) üzenetére


axioma
veterán

Me'g mindig nem. A szamologepbe NEM copy-zol olyat ami oda van irva (legalabbis az mar nem szamologep hanem mini-excel...). A szamologep a billentyunyomkodasok menten mukodik. Peldaul azt irja be hogy 12 / 17 sin. Ez lesz a sin(12/17). De mi a fenenek kuldened ebben a formaban a backend-nek? Te a nem szamjegy gombnyomasoknal, ha volt uj szam akkor azt es a muveletet kuldod el, es reszeredmenyt vissza. Tehat 12,/ eseten vissza 12, 17 sin-re vissza a sin(12/17). Ha megengeded a precedenciat (es/vagy zarojelet, de ez azert eggyel komplexebb, en elsore megneznem hogy a feladatleiras alapjan muszaj-e, mert a sima szamologep NEM tudja es a legtobb usernek kb. nem is kell), akkor annyi hogy a backend-en kell egy verem is. De a szamologepen tulkepp forditott lengyel, tokenizalt a bemenet (ugye a sin-ra se a 3 betut kell atkuldeni, hanem egy kodot ami azt jelenti nalad hogy a sin gombot nyomtak meg).

(#11075) axioma válasza axioma (#11074) üzenetére


axioma
veterán

"4*(3+sin(12))" -> a szamologepen ezt is ugy irod be leginkabb, hogy 12 sin +3, *4
Ha nagyon muszaj zarojelezest is tudni, akkor is ilyesmi:
4,* -> vissza 4
( -> vissza 0
3, + -> vissza 3
12, sin -> vissza sin(12)
) -> vissza 3+sin(12)
= -> vissza 4*(3+sin(12))
Tehat minden nem szamjegynel vagy 1 vagy 2 parametert kuldesz, ha volt szam akkor azt es a muveletet, ha nem, akkor csak a muveletet (zarojelet, akarmit).
Probald ki a windows tudomanyos szamologepben.
A nehezites a precedencia. De csak az osszeadas, szorzas eseten (max. ha kell hatvanyozas ott is). A sin() es mas 1-operandusu muvelet az mindig arra vonatkozik, amit epp kiir.

[ Szerkesztve ]

(#11076) mobal válasza axioma (#11075) üzenetére


mobal
MODERÁTOR

[link]?

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#11077) disy68 válasza mobal (#11076) üzenetére


disy68
aktív tag

Csak zárójelben. Én egy junior tréning programmal kezdtem egy multinál annó, ahol volt egy gyakorló feladat, ahol kvázi excel jelleggel kellett tudni kezelni cellákat (a cellának lehetett konkrét értéke vagy más cellákra is referáló függvénye). Ekkor futottam bele, hogy java 8-as verzióval bekerült a Nashhorn nevezetű Javascript Engine a JRE-be, amivel elég egyszerűen lehetett kiértékelni az egyszerűbb műveleteket. A js engine JVM byte-kódot generál. Nem használnám production-ben, pláne, hogy a 11-es verzióval deprecated, de érdekes volt, hogy van ilyen is. :)

“Yeah, well, you know, that’s just, like, your opinion, man.” — The Dude

(#11078) togvau


togvau
senior tag

Ezt meg tudja nekem valaki magyarázni?

JSF frontend, springboot-mvc-data backend. Júzer módosító felületen, egy @PostConstruct init metódus van, ami betölti a júzer listát, egy @Autowired @Service metódust hívva, ami Crudrepositoryt hív.

Ez rendben is megy. Módosítok a felületen (jelszó változtatás), ami hasonlóképpen történik, de hogy a változások rögtön látszódjanak, a JSF managedbean (ami a spring miatt inkább @Component) metódusa ami a servicet meghívja, az újra meghívja az initet, ami szintén, csak a lekérdezést.

Ez megint oké. De ha 2. alkalommal is módosítok valamit, akkor hibernate lazyinitialization exceptionnal elszáll, és mindig ugyan ez lesz ezen túl, ha reloadolom az oldalt, akkor is.
Ha nem megyek el eddig a 2. módosításig, vagy előtte reloadolom az oldalt, nincs ilyen probléma. Akárhányszor nyomogathatom az újratöltést, annyiszor lekérdez, nincs lazy probléma.

Mindegyik service metódus javax.transaction. @Transactional

A furcsaság amit itt észrevettem, hogy az első módosítás utáni frissítésnél, ha a managedbean metódus hívja meg az initet, akkor csak a fő tábla selectje megy le, az ahhoz kapcsolódó entityké nem. De ha böngészőben reloadot nyomok, akkor kapcsolódókat is selecteli.
Ugyan az a metódus 2 féle képpen működik? :F

[ Szerkesztve ]

hitler, sztálin, micro usb

(#11079) Superhun válasza togvau (#11078) üzenetére


Superhun
addikt

Ez az egész nekem nagyon nem kerek. Ezt a részt hogy érted? "JSF managedbean (ami a spring miatt inkább @Component)"
A JSF managed beannek @ManagedBeannek kellene lennie, nem @Componentnek. JSF-et és Springet ilyen formában nem szabad keverni. Itt le van egy jó példa, hogy hogyan kellene a Spring+JSF-nek kinéznie: https://www.baeldung.com/spring-jsf

(#11080) janos666


janos666
nagyúr
LOGOUT blog

Mit szoktatok javasolni, ha valaki ~nulláról akar megtanulni programozni? (Lehet angol, magyar, könyv, videó, ingyenes vagy olcsó fizetős, csak legyen lényegre törő, "intenzív".)

Rám jött a hepp. Minimálisan konyítok a C++ hoz (féléves választható tárgy volt régen egyetemi mérnök képzésen), de azt tanácsolta egy ismerősöm, hogy azt felejtsem el és inkább mondjuk Java (esetleg ~Script). De most még átküldhettek másik topic-ba. :DDD

TV/monitor kalibrálást vállalok. ||| "All right , Thom. But understand this: I do care for you. I care for all the lost souls than end up up here."

(#11081) togvau válasza Superhun (#11079) üzenetére


togvau
senior tag

Teljesen mindegy melyik van ott, a hiba ugyan az, ugyan úgy működik, (egyébként @componentnél a spring kezeli, managedbeannél meg a javas beépített cucc ennyi a különbség)

[ Szerkesztve ]

hitler, sztálin, micro usb

(#11082) Superhun válasza togvau (#11081) üzenetére


Superhun
addikt

Látni kellene a kódot, hogy érdemben tudjunk segíteni.

(#11083) togvau válasza Superhun (#11082) üzenetére


togvau
senior tag

meglett, az al entityket eager fetch-re kellett állítani... ami fura, mert eddig én úgy tudtam, az a default...
Az még furább, hogy elsőre működött jól, csaj utána nem...

hitler, sztálin, micro usb

(#11084) Zsoxx válasza janos666 (#11080) üzenetére


Zsoxx
senior tag

Én azt javaslom, hogy csak akkor vágj bele, ha annyira szereted, hogy egész hátralévő életeben ezzel akarsz foglalkozni.

(#11085) togvau


togvau
senior tag

Na beszívattam magam... már nagyon keveredtek a dolgok, nem akarom újraírni.
Szóval spring MVC, security+JSF

Működik minden, addig, hogy kellene az egyik jsf oldalon egy lekérdezés, ami az oldalt megnyitó belépett org.springframework.security.core.userdetails.User adatai alapján kérdez le.

@Controller-ben tökegyszerű, csak egy @AuthenticationPrincipal MaiUserDetailz user paraméter kell a metódusba. De ez csak @Controller-ben használható, és nekem a @Service-ben kellene, vagy ha nincs rá más megoldás, akkor a jsf beanjének átadni valahogy.

Erre valami ötlet?

hitler, sztálin, micro usb

(#11086) togvau válasza togvau (#11085) üzenetére


togvau
senior tag

megvan. SecurityContextHolder.getContext().getAuthentication().getPrincipal() mindenhol műxik :)

hitler, sztálin, micro usb

(#11087) mobal válasza janos666 (#11080) üzenetére


mobal
MODERÁTOR

Ha meg akarod tanulni akkor inkább Python. Az egész kulcsa, hogy a gondolkodás módot sikerül-e elsajátítanod. Ha az megvan akkor pár év gyakorlat és kb. tök mind1, hogy miven dolgozol menni fog.

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#11088) janos666 válasza mobal (#11087) üzenetére


janos666
nagyúr
LOGOUT blog

A fáradt gőzben válaszoltam inkább.

TV/monitor kalibrálást vállalok. ||| "All right , Thom. But understand this: I do care for you. I care for all the lost souls than end up up here."

(#11089) togvau


togvau
senior tag

nem túl fontos, csak optimalizációs kérdés:
van egy jpql query, hogy pl: SELECT w FROM Stuff s JOIN User u ON s.owner_id=u.id WHERE u.id=?1
De itt épp nem kellene semmi a User-ből, szükségtelen a join, az owner_id-re keresni a where-ben elég lenne.
Tehát SELECT s FROM Stuff s WHERE s.owner_id=?1 de így elszáll, hogy nem találja az owner_id-t, pedig DB szinten van ilyen, csak entity-ben ugye User owner van.
Ilyet így csak natív queryben lehet?
Vagy ilyenkor a DB okosan egyszerűsít, és tudja, hogy a 2.-al kiváltható az első query?

[ Szerkesztve ]

hitler, sztálin, micro usb

(#11090) Superhun válasza togvau (#11089) üzenetére


Superhun
addikt

Próbálj ki valami ilyesmit:

SELECT s FROM Stuff s WHERE s.owner.id = ?1

[ Szerkesztve ]

(#11091) floatr válasza Superhun (#11090) üzenetére


floatr
veterán

Látni kéne a mappinget, de igen esélyes, hogy megint keveri az SQL-t és a JPQL-t. JPQL-ben nem kell ON

(#11092) bambano válasza janos666 (#11080) üzenetére


bambano
titán

hogy lapozz vissza 2-3 oldalt a topicban.

Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis

(#11093) togvau


togvau
senior tag

megint szívás a keveréssel... spring MVC controller, JSF-el. Tökjó volt addig, amíg nem kéne egy jsf oldalt GET url paraméterrel megnyitni.
De ott elakadtam:
  @GetMapping(path = "/public/list/{id}")
public String publicwish(@PathVariable long id, Model model) {
   System.out.println("Controller:"+id);
   model.addAttribute("id", id);
      return "public/list.xhtml";
    }

nem spring controllernél van az f:viewParam, de itt sehogy se működik. 1 darab id-t kellene csak a jsf managedbeannek eljuttatni, akárhogy. Ezt a model-t se tudom hogy lehetne elérni jsf-ből. A returnbe bármi mást írok, akkor 404 lesz. Így bejön az id a controllerhez, de a jsf-be nem megy tovább. Erre mi a megoldás?

Najó találtam rá egy megoldást, de az igen csúnya :)

[ Szerkesztve ]

hitler, sztálin, micro usb

(#11094) mobal válasza togvau (#11093) üzenetére


mobal
MODERÁTOR

A logikát pakold át @Service-be a kontrolleredből. Model helyett pedig dto-kat illik adni controllernek.

[ Szerkesztve ]

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#11095) floatr válasza mobal (#11094) üzenetére


floatr
veterán

Ebben a DTO-témában nem értünk egyet. Függ a modell bonyolultságától is, de ha van rá mód érdemes kerülni a felesleges kódgyártást, ami rétegenként átalakítja az adatokat. Életveszélyes hibaforrás, amit még integrációs teszteken is nehéz utolérni.

(#11096) Superhun válasza floatr (#11095) üzenetére


Superhun
addikt

Így van, nem véletlenül alakultak ki olyan frameworkok, mint pl. a Spring Data REST, ami közvetlenül Entityket dobál ki a frontendnek. Faék egyszerű use-case-ekhez teljesen jó.

(#11097) mobal válasza floatr (#11095) üzenetére


mobal
MODERÁTOR

Független a model bonyolultságától. Pusztán biztonsági okai vannak: [link]

Szerk.: [link]

[ Szerkesztve ]

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#11098) floatr válasza mobal (#11097) üzenetére


floatr
veterán

A legjobban az tetszik, hogy a sonar oldalán lévő leírás és javaslat is tele van agyatlan anti-patternekkel. Sajnos a sonar tele van hülyeséggel, nem véletlen, hogy meghagyták a lehetőségét annak, hogy kikapcsolj egy-egy szabályt ;)

Ha DTO-kat gyártasz akár rétegenként, akár microservice-enként, akkor plusz konverziós lépéseket teszel a kódba potenciális hibaforrásokként. A leggyakoribb az, amikor egy fejlesztő erre rá van kényszerítve, hogy gépiesen átdobálja az adatokat, néha konvertál típusok közt. Komplexebb lesz a kód, és semmi nem teszi biztonságossá abban az irányban, amit a sonar szabályban és a linkjeiben -- leginkább csak -- sugallnak. A mintakód félrevezetően gyatra, hűen tükrözi a témakörben gyakori ultragagyi minimalista tutorialok szellemét. Nem ment semmi és senki automatikusan, ellenőrizetlenül, validáció, autentikáció és access control nélkül, pláne nem a Controllerből, ha publikus endpointról van szó. Ha microservice-eket használunk, akkor meg egyenesen hiba eltakarni egy újabb réteggel az adatokat pl az api gateway elől. Hasonló okokból teljesen feleslegesnek tartom az OpenSessionInView filterrel kapcsolatos felindulásokat.

A leggyakoribb érdemi oka annak, hogy DTO-t vagy projekciót kell használni, az szokott lenni, hogy teljesítménybeli optimalizációt kell csinálni, így bizonyos lekérdezéseket view-ra specializáltan kell implementálni, vagy mert a frontend nem tud mihez kezdeni összetett adatokkal. Esetleg az api gateway összegyúr két service-ből származó adatot, de az meg szvsz tervezési hiba, ha erre kényszerült rá valaki.

Egy esetben látom még a létjogosultságát a DTO-szerű képződményeknek, ha az Entity/Document bloated lenne egyébként. Ez meg szubjektív.

Nem kell, hogy egyetértsünk, de a dogmatikus kijelentések teszik tönkre a szakmát.

(#11099) mobal válasza floatr (#11098) üzenetére


mobal
MODERÁTOR

Szerintem van ráció abban amit a SonarLint ír. Lehet, hogy komplexebb lesz a dolog de akkor is biztonságosabbá válik azáltal, hogy valmait kell kezdened a DTO-val és nem tudod csak úgy pusztán elmeneteni.

Az egész sonar opcionális, nem muszály használnod. De egyszerűen, egy plugin telepítésével összeségében nagyon sokat tudsz javítani a minőségen.

Én általában a nálam okosabb emberek által javasolt dolgokat elfogadom, persze nem jelenti azt, hogy neked is el kell. Régóta létezik, ha akkor szar lenne, azért bízom benne, hogy nem létezni.

Ki volt és megint hol demagóg? Valláshábórú != demagógia (bocs, ha nem nekem szólt).

"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."

(#11100) axioma válasza mobal (#11099) üzenetére


axioma
veterán

En tobb dologban nem ertek egyet a sonarlint-tel, de ettol me'g orulok hogy van, mert neha egyszeru teveszteseknel felhivja a figyelmet a potencialis hibara.
A baj az amikor kotelezove teszik az osszes sonarlint hiba javitasat, es olyan szornyek keletkeznek, hogy az mar nem konnyiti hanem neheziti a megertest. Mert azt megertem hogy a sonarlint celja olyan szintre levinni a fejlesztes szinvonalat hogy egysegsugaru programozo is kovetni tudja, de ez minden csak nem hatekony, ha nem egysegsugaruakkal csinalod amugy a projektet.
Nyilvan SZVSZ.

Útvonal

Fórumok  »  Szoftverfejlesztés  »  Java programozás (kiemelt téma)
Copyright © 2000-2024 PROHARDVER Informatikai Kft.