Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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: DevbookMVC se blíží

Aktivity
Avatar
David Hartinger
Vlastník
Avatar
David Hartinger:12.12.2012 16:00

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
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:12.12.2012 16:29

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 Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:12.12.2012 17:01

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
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:12.12.2012 17:21

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
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:12.12.2012 21:48

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
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:12.12.2012 21:58

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 Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:13.12.2012 11:05

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
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:13.12.2012 12:33

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 Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:13.12.2012 16:43

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
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:13.12.2012 17:28

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 Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:13.12.2012 17:51

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

Nahoru Odpovědět
13.12.2012 17:51
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:13.12.2012 18:00

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 Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:13.12.2012 20:55

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
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:13.12.2012 22:50

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.