Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Ahoj, již dost dlouhou dobu jste mě tlačili k napsání PHP tutoriálů pro objektový web na MVC architektuře. Dnes sem nahazuji první (vlastně druhou) verzi prototypu, který bych rád vytvořil v několikadílném tutoriálu.

Základní vlastnosti DevbookMVC:

Maximální jednoduchost, celé to má jen pár tříd a řádků
Oddělení zpracování logiky a výstupu
Šablona stránky, do které se vkládá šablona kontroleru
Automatické ošetření bezpečnostních rizik (databáze a šablony)
Jednoduchá rozšiřitelnost
Hezké URL adresy
Určitě spoustu dalších věcí, které mě teď nenapadají :)

Projekt jsem z původního včerejšího pokusu vyčistil a okomentoval. PDO Wrapper psal Kit, kterému za něj velice děkuji.

Byl bych rád za konstruktivní kritiku, hlavně ohledně návrhu a zjednodušení, chtěl bych, aby byla celá věc co nejkratší.

Projekt je ke stažení na https://dl.dropbox.com/…okMVC_02.zip

Díky za vaše názory.

Odpovědět 12.12.2012 16:00
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Tak jsem si to konečně stáhl a rozbalil. První postřehy:

Ve funkci autoloadCallback jsem měl chvíli problém pochopit, podle čeho se rozlišuje na adresáře controllers a models. Pokud by těch adresářů bylo víc, asi by to bylo ještě méně přehledné.

Nechápu, co v controllerech pohledávají výstupní šablony. Ty přece patří do vieweru.

Metodu specialize() jsem měl také trochu problém pochopit. Pak jsem zjistil, že v ní děláš něco, co nechávám na XSLT. Ale co to dělá v controlleru, to stále nechápu.

Jako začátečník bych si asi moc neškrtl. Asi napíšu své MVC jak ho chápu já a také ho vystavím. Ať si každý vybere.

Nahoru Odpovědět 12.12.2012 16:29
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Já to dobře popíšu, to se neboj :) Specialize je v controlleru proto, že controller chápu jako prostřednka mezi modelem a pohledem, úprava dat z modelu pro pohled tedy patří právě sem. Viewerům jako třídám jsem se chtěl vyhnout, přijdou mi zbytečné, stačí prostá phtml šablona.

Nahoru Odpovědět 12.12.2012 17:01
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Viewer může být pro HTML, DOC, PDF, PS apod. a pokaždé potřebuje jiné escapování dat. Proto takové metody do controlleru nepatří.

Asi si ho pleteš s presenterem, u kterého viewer nemá přímý přístup k modelu.

Nahoru Odpovědět 12.12.2012 17:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Ještě přidám pár pravidel, která se mi osvědčila:

  • Model nesmí vědět, co je to HTML
  • Viewer nesmí vědět, co je to SQL
  • Controller nesmí umět nic z HTML ani SQL

Dodržením těchto pravidel se stanoví jasná hranice mezi jednotlivými moduly. Model se stará pouze o data a viewer o HTML. Controller jen modelu sděluje, co se má na datech změnit.

Nahoru Odpovědět 12.12.2012 21:48
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Ještě dvě trochu drsnější omezení:

  • Controller do modelu zapisuje, ale nikdy z něj nečte. Pouze status, zda se operace povedla
  • Viewer z modelu čte, ale nikdy do něj nezapisuje
Nahoru Odpovědět 12.12.2012 21:58
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Ta první omezení splňuji, ta druhá nesplňuje hodně frameworků, co se označují jako MVC. Trochu jsem googlil a zjišťuji, že názory na role jednotlivých modulů se velmi rozcházení. V mé verzi pohled o modelu neví.

Nahoru Odpovědět 13.12.2012 11:05
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

V tom případě používáš architekturu Model-View-Presenter, tedy MVP. Dost se to plete, proto je v tom takový chaos.

Nahoru Odpovědět 13.12.2012 12:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Jaký je tedy rozdíl mezi MVC a MVP? Co já jsem našel, tak prý v MVP si kontroler neurčuje pohled. Mám tedy asi něco mezi :D

Nahoru Odpovědět 13.12.2012 16:43
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

V MVC controller přijímá povely k modifikaci dat a předává je modelu. Model mu vrací stavovou informaci, zda se mu operace povedla či ne. Víc nic. Viewer přijímá povely k zobrazování, vyptá si od modelu data a ta zobrazí.

V MVP presenter přijímá povely k modifikaci i zobrazování dat, vyžádá si data od modelu (příp. modifikaci), získaná data předá vieweru k vytvoření výstupu a tento výstup presenter předá klientovi.

Nahoru Odpovědět 13.12.2012 17:28
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

V tom případě mám tedy MVP.

Nahoru Odpovědět 13.12.2012 17:51
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Což také není špatně. Našel jsem mezitím zajímavý článek na
http://martinfowler.com/…uiArchs.html
včetně diagramů tříd a sekvenčních diagramů.

Nahoru Odpovědět 13.12.2012 18:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:

Kouknu na to. Do toho tvého wrapperu jsem si přidal to update. Proč by tam odpadla možnost používat transakce? Dodělávám tam teď editor článků a ještě asi budu muset napsat nějakou vzorovou autentifikaci. Ačkoli se mi velmi nechce, asi zdrojáky přeložím kompletně do češtiny, jako jsem to dělal ve všech zdejších tutoriálech.

Nahoru Odpovědět 13.12.2012 20:55
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

PDO má vlastní metody pro transakce, musely by se dopsat. Samozřejmě se to dá udělat přímo v SQL. Zkoušel jsem kdysi PDO dědit, ale nešlo mi to. Možná kvůli final.

Přeložení zdrojáků do češtiny na rozdíl od matesaxe podporuji. Líbí se mi, když proměnné a metody jsou česky, kontrastují s klíčovými slovy.

Autentizaci jsem už kdysi dělal, zádrhele v tom nebyly. S autorizací to bylo o něco horší, ale ta se také dala zvládnout.

Nahoru Odpovědět 13.12.2012 22:50
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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 14 zpráv z 14.