Zobrazit příspěvky

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.


Příspěvky - BoneFlute

Stran: 1 ... 93 94 [95] 96 97 ... 133
1411
Vývoj / Re:OOP jazyk - problém klasického stříhu
« kdy: 11. 06. 2018, 18:59:38 »
Nene, tohle mám v metodě controlleru. Ve view je něco podobného s opačným směrem toku dat.

OK. A proč je tedy model (asi s významem persistence) víc model, než model uživatele? Já bych to pojmenoval:

Kód: [Vybrat]
$persistence->save($entry);

a po ftákách. User a Model je v tomto kontextu maďarština. Používat tu výraz model mi tu nedává smysl právě proto, že se tu neopíráš o ty další dvě komponenty.

1412
Vývoj / Re:OOP jazyk - problém klasického stříhu
« kdy: 11. 06. 2018, 18:40:15 »
A proč to nazývat nekonkrétním slovem "model"? Všechno je model...

Tak nějak.

Nazývat něco Modelem má smysl jen v kontextu k dalším dvoum (třem) komponentám. Samo o sobě nikoliv.

Však tou další komponentou je user, který je v parametru metody. Přece nebudu psát modelUser.save(user), když to není třeba. Navíc ten model ani neví, co je "User", takže to slovo do názvu ani nepatří.

To, že přemejšlíš jak správně nazvat věci je samozřejmě chválihodné, ale tady řešíš úplně jinej problém. Tou další komponentou k modelu je view a controller/presenter, žádnej User.

1413
Vývoj / Re:OOP jazyk - problém klasického stříhu
« kdy: 11. 06. 2018, 18:28:41 »
V tom modelu není jen user, ale spravuje všechny datové zdroje včetně databází. User je komponentou toho modelu.

V takovém případě pro to je zažité jiné názvosloví (persistence, context, ...). Každopádně to jak to popisuješ se mi nelíbí. A jak tě znám, tak dále to s tebou nebudu řešit.

1414
Vývoj / Re:OOP jazyk - problém klasického stříhu
« kdy: 11. 06. 2018, 18:24:27 »
A proč to nazývat nekonkrétním slovem "model"? Všechno je model...

Tak nějak.

Nazývat něco Modelem má smysl jen v kontextu k dalším dvoum (třem) komponentám. Samo o sobě nikoliv.

1415
Vývoj / Re:OOP jazyk - problém klasického stříhu
« kdy: 11. 06. 2018, 16:11:07 »
(Teoreticky by mohlo, ale docela by mě zajímalo, zda o tom víš, nebo máš jen zažranou svou představu o vztahu getter a interní atribut.)

Tuto zažranou představu má hlavně většina tvůrců aplikací, které jsem kdy viděl.

Takovej je život.

... ale gettery bývají zpravidla jen "return this.atribut".
Což nemusí být špatně. Existuje celá kategorie objektů, u kterých je to zcela korektní a naopak, udělat to jinak by bylo chybou.

1416
Vývoj / Re:OOP jazyk - problém klasického stříhu
« kdy: 11. 06. 2018, 16:06:37 »
Suma sumárum - metoda User.save() má jednu jedinou výhodu - je to krátké a stručné.

A co bys řekl na metodu model.save(user)? Tohle se mi docela osvědčilo.

Jedinou výhradu bych měl k tomu názvu model (zrovna u tebe!). I user je model.

Ale jinak ano, takto to dělám a mám s tím dobré zkušenosti.

user reprezentuje objekt uživatele. model reprezentuje objekt nějakého procesu. Třeba zaregistrování uživatele do systému.

1417
Vývoj / Re:OOP jazyk - problém klasického stříhu
« kdy: 11. 06. 2018, 15:24:51 »
Opravdu mě jenom zajímá, co je špatně na tom save().

Vytknul bych tomu dvě věci:
1/ To, čemu patří nějaká metoda by mělo dávat nějak významově logiku. Je logické aby bylo Máslo.cut() ale třeba Máslo.vložSeDoLedničky() mi přijde divné.
Podobně, objekt uživatele má spousta vlastností. Například může mět práva někam přistupovat. Ale nepřijde mi čitelné, aby sám od sebe uměl vzniknout, nebo se uložit. Tak ještě serialize a unserialize - potud ok, ale něco komplexnějšího?
2/ Má-li objekt User metodu save(), tak lze celkem dobře předpokládat, že je to nějaký side-effekt. Což mě samo o sobě děsí. Když uložím toho uživatele, kam se mi uloží? Mohu to nějak ovlivnit? Třeba nějakým globální přepínačem?! Nebo setterem, kterým přepíšu to úložiště? A co když ho chci uložit na dvě místa? Co když budu chtít před ukládáním udělat nějakou validaci? A jen někdy. A po uložení třeba poslat mail? Taky jen někdy. Nebo různé maily v různých situacích.

Suma sumárum - metoda User.save() má jednu jedinou výhodu - je to krátké a stručné. Jinak mám zkušenost (viz víš), že v případě komplexnějšího systému se to celé zašmodrchává. Ne, že by to nešlo, ale je to děsně nečitelné ve smyslu:
Kód: [Vybrat]
if ACL.check(user):
    user.setPersistence(adminUserPersistence)
    user.save()
    user.setMailer(adminUserMailer)
    user.send()
else:
    user.setPersistence(guestUserPersistence)
    user.save()
    user.setMailer(guestUserMailer)
    user.send()
    user.setMailer(adminUserMailer)
    user.setMailerContent(adminUserMail.txt)
    user.send()
A jakmile je to nečitelné, tak pak jaksi padá ta jediná výhoda.

1418
Vývoj / Re:OOP jazyk - problém klasického stříhu
« kdy: 11. 06. 2018, 15:11:53 »
Z podobných důvodů si mnozí oblíbili FP a nemám jim to za zlé. Struktury pro data používají také a říkají jim monády.
Ne, tomu fakt monády neříkáme. Struktury pro data používáme, a říkáme tomu struktury.

Pouštíš se na tenkej led :-P

1419
Vývoj / Re:OOP jazyk - problém klasického stříhu
« kdy: 11. 06. 2018, 15:09:15 »
Getter samotný by zapouzdření neporušoval, kdyby ho nikdo nepoužíval. Jeho použitím dochází ke zpracování interních atributů mimo objekt, což zapouzdření porušuje.

Kód: [Vybrat]
print "foo: " + d.getFoo()

Zde neprobíhá žádné zpracování interních atributů mimo objekt.

Kód: [Vybrat]
class Boo:
    private x, y
    getXoo():
        return this.x * this.y

Ani zde neprobíhá žádné zpracování interních atributů mimo objekt.


(Teoreticky by mohlo, ale docela by mě zajímalo, zda o tom víš, nebo máš jen zažranou svou představu o vztahu getter a interní atribut.)

1420
Vývoj / Re:OOP a pravidla pro konstruktor
« kdy: 07. 06. 2018, 03:26:44 »
Citace
Nedalo by se říct, že lambda je ta anonymní funkce,

Asi dalo, ale muze to byt matouci. Radsi pouzivam pojem "lambda-vyraz", coz je vyraz, ktery se vyhodnoti na funkci. Tu muzes zavolat a pracovat s ni jako s jakoukoliv jinou funkci neho hodnotou. (Odpada tam problem s tim, jestli tou anonymni funkci je jeji deklarace nebo vysledna hodnota.)

Citace
uzávěr je celej ten kontext kolem ní, který si musí táhnout sebou

Uzaver je ta funkce + odkaz na lexikalne nadrazene prostredi. Kam se funkce diva na hodnoty volnych promennych (symbolu), kdyz je zavolana (vyhodnocena).

Citace
Plus pak je tam ještě ta sranda s tím, že ve většině jazycích se zafixovávaj

To dela JVM jako optimalizaci. U uzaveru nedrzi odkaz na nadrazene prostredi, ale vsechny pouzite hodnoty nakopiruje do uzaveru. LISPy to nedelaji a je s tim vetsi sranda.

Takže jak jsem to psal.

Citace
(tuším, že se tomu snad říká dynamic scoping)

To je neco uplne jineho.
Dynamický versus lexikální rozsah platnosti tomu říkaj.

1421
Vývoj / Re:OOP a pravidla pro konstruktor
« kdy: 07. 06. 2018, 02:19:55 »
Ano, bude to presnejsi, ale prinos pro porozumeni bude vyrazne mensi.

Mě by ten tvůj původní příklad zmátl :-)

1422
Vývoj / Re:OOP a pravidla pro konstruktor
« kdy: 07. 06. 2018, 02:18:06 »
Citace
Jen pro pořádek, co myslíš, že to * je zač? Proměnná (v lispu se říká přesněji symbol). Takže jako příklad poněkud nešťastné.

Tak si tam dosad treba:

Kód: [Vybrat]
(lambda (f g x) (f (g x))

Ano, bude to presnejsi, ale prinos pro porozumeni bude vyrazne mensi.

Nedalo by se říct, že lambda je ta anonymní funkce, a uzávěr je celej ten kontext kolem ní, který si musí táhnout sebou, aby tam byly ty navázaný proměnný se správnou hodnotou? Plus pak je tam ještě ta sranda s tím, že ve většině jazycích se zafixovávaj, v některých (CLisp) ne (tuším, že se tomu snad říká dynamic scoping).

1423
Vývoj / Re:OOP a pravidla pro konstruktor
« kdy: 07. 06. 2018, 02:03:57 »
bot("Onestone") Off ?

Hele nevíte někdo prosím, jak se ti boti vypínají?

1424
Vývoj / Re:OOP a pravidla pro konstruktor
« kdy: 07. 06. 2018, 01:52:35 »
Za chvíli ti tu někdo vysvětlí, že v FP proměnné nejsou (což je sice blbost, ale někteří to omílají furt dokola). Jinak to * nemá vůbec žádný vliv na uzávěrovost, ale to už zacházíme k příliš pokročilým aspektům (v kontextu roota), tak se děti přestaňte hádat.

Máš pocit, že se tě někdo na něco ptal?

1425
Vývoj / Re:OOP a pravidla pro konstruktor
« kdy: 07. 06. 2018, 01:43:03 »
Kód: [Vybrat]
(lambda (x) (* x x)) -> funkce jednoho paremetru pocitajici druhou mocninu.

Vsimnete si, ze zadny uzaver nevznikl, protoze telo lambda-vyrazu neobsahuje volne promenne.

Jen pro pořádek, co myslíš, že to * je zač? Proměnná (v lispu se říká přesněji symbol). Takže jako příklad poněkud nešťastné.

Stran: 1 ... 93 94 [95] 96 97 ... 133