NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 8 - Programování databázového Wrapperu v Javě - Dokončení

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:3.5.2014 11:07

Hezký seriál, příjemně jsi mě překvapil. Co se týče vylepšení, tak bych určitě pracoval s Connection, Statementy a ResultSety jen v bloku TWR. Na desktopu je to jedno, ale na webu, kde vytvoříš při každém dotazu nové spojení, by došlo rychle k zahlcení poolu. S ResultSetem to bude komplikovanější, musel bys data asi vracet jen v nějakém poli.

Odpovědět
+2
3.5.2014 11:07
New kid back on the block with a R.I.P
Avatar
coells
Tvůrce
Avatar
coells:3.5.2014 13:25

Navrhovat API je vždycky poměrně složitá záležitost a bývá to náročné i pro zkušené programátory. Na začátečníka tvůj wrapper není až tak špatný. Ale pokud budu realista a představím si, že bych měl tvůj wrapper denně používat, je to hrůza. Jenže jak to opravit?

Když navrhuješ API, vždy se musíš snažit dodržet následující koncepty

  • konzistence
  • bezpečnost použití
  • jednoduchost

Aby to bylo složitější, tyhle koncepty jdou proti sobě.
Jednoduchost většinou narušuje konzistenci a bezpečnost.
Konzistence a bezpečnost použití zase vedou ke složitějšímu API.

Kde tvůj wrapper porušuje jednotlivé principy?

  • konzistence - metody select, update, delete se drží SQL, zatímco save nahrazuje insert - to je matoucí
  • konzistence - update vyžaduje WHERE, select zase celé QUERY, delete nechce nic
  • konzistence - návratové hodnoty jsou jeden velký nepořádek - jaký je rozdíl mezi hodnototu ze save, update, delete? navíc metoda delete() vrací void?
  • bezpečnost - míchat sémantiku různých hodnot do proměnného počtu parametrů... to se nedělá - co když napíšu database.dele­te("programato­ri", "id <> ?", null, 5) - taková bota se stane snadno, ještě častěji to uděláš u updatu a data jsou ... víš kde
  • bezpečnost - metoda delete() je chyba, chyba, chyba - jak často chceš vymazat celou tabulku?
  • jednoduchost - z celého kódu je vidět, že ses snažil mít co nejjednodušší API, jenže paradoxně jsi jednoduchost pokazil, protože čitelnost není zrovna nejlepší

Jednoduché API musí být snadné nejen pro zápis, ale také pro čtení. Co dělá metoda x.save("a", "b"), co dělá metoda x.update("a", "jmeno = ? or id="?", "c", 1, "d", 1)? Kód musí být čitelný i 10 minut poté, co jsi ho napsal.

Co bys měl udělat pro nápravu takových chyb? Vezmi kód z main metody a snaž se ho upravit do co nejlepší podoby, musí být z kódu vidět, co dělá, musí být těžké si překlepem vymazat obsah databáze, musí být snadné takový kód napsat. Někdy to trvá celou řadu iterací, než se dostaneš ke slušnému výsledku. No a pak podle toho uprav celé API.

 
Odpovědět
+11
3.5.2014 13:25
Avatar
ondrejbenes
Člen
Avatar
Odpovídá na David Hartinger
ondrejbenes:15.1.2016 12:28

Existuje tedy nějaké jednoduché řešení jak API upravit aby nedošlo k zahlcení poolu při běhu aplikace na webu?

 
Odpovědět
+1
15.1.2016 12:28
Avatar
Zdeněk Zemek:25.1.2017 11:32

hmmm tak to je dobrý, až na konci se vlastně z komentářů dozvím, že API není nic moc a nemám si z něj moc brát příklad :-). Některý věci jsem si taky upravoval už za běhu, např. pomocná metoda FROM, která chybí. HOdně se mi líbí co napsal Coell - pro začínající programátory jako jsem já, by tu měl být vůbec popis jaký princip při tvorbě API použít. Kod zde by měl být navíc napsán dobře a bez chyb :-(((, ale zase nás to nutí přemýšlet aspoň...vono to taky má svoje :D

 
Odpovědět
+2
25.1.2017 11:32
Avatar
dfdfdf
Člen
Avatar
dfdfdf:6.6.2018 12:15

Dobry den, prosim vas mohl by nekdo vysvetlit, jak vytvorit prikaz "SELECT * FROM PROGRAMATORI". Diky
Numuzu pochopit ,kde mam chybu.

Editováno 6.6.2018 12:17
 
Odpovědět
6.6.2018 12:15
Avatar
František Trojan:4.5.2021 0:40

Tak jsem si koupil test na konci tohoto kurzu a byl jsem nemile překvapen, že se vůbec netýkal tématu. Otázky byly vesměs na Derby DB, která se zde vůbec neřešila. Koukněte se na to pánové a opravte to. Podle výsledků testů jsem byl asi jediný, kdo ho zkusil.

 
Odpovědět
4.5.2021 0:40
Avatar
Jan Křížek:2.11.2021 15:47

Ten konečný test opravdu nemá nic společného s tímto kurzem.
Bylo by vážně skvělé to opravit.
Díky

 
Odpovědět
2.11.2021 15:47
Avatar
Yveta Kršková:2. března 9:11

Za mě byl celý kurz docela prima. Motivoval mě zkusit si naprogramovat vlastní wrapper a procvičit si tak vzdálené příkazy pro databázi SQL.
Co bych změnila, jsou asi otázky v testu na funkce IntelliJ, protože ačkoliv je to dobrý obecný příklad na rozjezd, já jsem použila NetBeans. IntelliJ má zkušební verzi a tu se mi nechtělo stahovat. Také nevidím důvod, proč wrapper nelze programovat strukturovanou cestou, ačkoliv to asi nevyústí v žádné opticky líbivé rozhraní, bude to moře neroztříděného kódu a bude se to muset spouštět nanovo pro každé zadání. Ale otázka zněla, jestli je to možné, ne jestli je to účelné.
Ukázka naprogramovaného wrapperu bude samozřejmě vypadat jinak při adaptaci na grafické rozhraní, nejlépe klasické tabulkové, které si tahá data samo z aktivních buněk, takže samotný uživatel neřeší už nic jiného, než co napsat do označené buňky.

Odpovědět
2. března 9:11
:D :D :D
Avatar
Tomáš Klír:27. března 11:26

Část přepsání uživatele obsahuje chyby:

  • id uživatele má být 22
  • rozepsané vysvětlení neobsahuje sloupec jazyk

    UPDATE osoby SET jmeno = ? ,vek = ? where id = ?

 
Odpovědět
27. března 11:26
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.