3286
Vývoj / Re:Unzip v Javě skoro tak rychlý jako 7zip?
« kdy: 09. 06. 2018, 07:48:56 »jakto že je to sakra skoro tak rychlé jako v céčku psaný 7zip?Proč by to tak rychlé být nemělo?
Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.
jakto že je to sakra skoro tak rychlé jako v céčku psaný 7zip?Proč by to tak rychlé být nemělo?
Metoda send(cíl) prostě odešle data do cíle - zavolá metodu cíl.send(data). Pokud nemám gettery, tak to vlastně ani jinak nejde.A jak taková metoda send(cíl) zapadá do oblasti zodpovědnosti objektu User? Jak už jsem psal, takových metod může mít objekt stovky – aby vytvořil unikátní identifikátor instance, aby se hezky vypsal, aby se zvalidoval, aby vrátil svou velikost v paměti…
Ve všech případech to říkám nějaké proxy: database, email, validace, tisk...Ne, ve všech případech to říkáte objektu User (posíláte mu zprávu „send“). A těžko pokryjete vše, co lze s objektem User dělat, jednou službou send s jedním rozhraním.
To přece neříkám přímo emailu nebo databázi, ale nějakým proxy, které tento úkon udělají.Pokud má objekt User službu „ulož se“, neříkám to žádné proxy, ale přímo tomu objektu User. A ten objekt musí vědět, že existuje nějaká proxy, která to uložení provede. Proč? Když budu chtít objekt User poslat e-mailem, budu muset jeho rozhraní rozšířit o „pošli se e-mailem“, což zase bude jen převolání nějaké proxy. To samé validace, tisk…
Nicméně původní problém je spíš v tom, že "učebnicové OOP" je těžko prakticky použitelné na architekturu/design aplikace. Ne že by to nešlo, ale prostě to dře. Čím vyšší úroveň, tím je to horší.Přesně tak. Něco jiného je programovací jazyk a něco jiného architektura/design aplikace. Takové ty klasické příklady s osobami, psy nebo geometrickými tvary svádějí k myšlence, že se popisuje architektura aplikace, ve skutečnosti se ale OOP používá na úrovni programovacího jazyka, zatímco architektura aplikace je spíš řešená jako data + služby.
Databázovou proxy můžeš do objektu injektovat stejně dobře jako logování nebo odeslání mejlu. Stačí, aby tyto služby měly stejné rozhraní. Objekt User vůbec nemusí tušit, komu ta data posílá metodou save().Někdy to tušit musí, protože ta data k uložení budou pro každý způsob uložení trochu jiná.
Dědičnost sem však vůbec nepatří. Co bys tady chtěl dědit? User přece není ani Databáze, ani Soubor.UserVDatabázi je User, stejně tak UserVSouboru.
Ale já mám namysli konkrétní implementaci algoritmu, která provede uložení toho objektu User, a ta patří v každém případě jinam! Teprve potom totiž můžu ukládat do databáze, do souboru, nebo třeba do HTML. Právě tento princip např. Active Record porušuje.Já si také myslím, že služba uložení objektu User nepatří do objektu User. Ale podle učebnicového OOP by právě do toho objektu patřila, a konkrétní implementace ukládání (databáze, soubor) by se řešila dědičností. Mimo jiné i proto, že v databázi bude mít uživatel asi nějaký identifikátor (primární klíč), který by User neměl nikam vystavovat, ale metoda pro uložení do databáze ho bude muset znát.
Ano, to by bylo krásné, jenže nemůžete uložit jen tak Usera s id Company, když Company ještě není uloženo a tudíž ten klíč zatím v DB neexistuje.To už se ale nebavíme o OOP, ale o tom, že relační databáze a OOP jsou dva různé světy, mezi kterými nejde jednoduše mapovat, a už vůbec ne automaticky. Což je vidět na věcech jako JPA, které vedou k tomu, že nemáte dobře ani relační model ani OOP.
Oddělení datové struktury, a "zpracovávacího mechanismu" (algoritmu) do jiné třídy, to je také "best-practice" v OOPNikoli, OOP je pravý opak, tedy spojení dat a s nimi souvisejících funkcí do jednoho objektu.
Jenže v modetě save() v Userovi se přece nemůže zpracovávat i Company a Address, to je kravina.Také to tak v čistém OOP být nemá. Metoda User.save() má uložit stav uživatele – asi to bude znamenat i uložit nějaké vazby na Company a Address, např. jejich ID. A Company a Address zase budou mít své metody save(), které se postarají o uložení konkrétních objektů.
Srovnat to s temi RewriteRule/RewriteCond...Jenže ty RewriteCond jsou tam nesmyslné. Konfigurace Apache může být úplně stejná, jako vaše konfigurace nginxu, nahradil by se řádek za řádek.