Autor Zpráva
tssk
Profil *
Zdravím,

mám za sebou pár projektů, kdy jsem nepoužíval OOP v PHP. Nedávno jsem však dodělal jeden malý projekt v ASP.NET + C# a celkem mě zaujala ta čistota toho kódu oproti PHP, kde jsem to všechno "mastil" dohromady. Je tam krásně oddělená prezenční vrstva (ASP.NET) od datové (řešená v C#).

Proto bych si chtěl zkusit napsat web prostřednictvím OOP v PHP. Ale nemám moc představu jak by to mělo vypadat. Budu mít např. 2 třídy, ke každé stránce - kdy jedna bude obstarávat ten výstup na obrazovku - sestavování dané stránky (prezenční vrstva) a pak k dané stránce budu mít druhou třídu, která bude komunikovat s databází, provádět dotazy a předávat data té první třídě (datová vrstva)?

Nebo budu mít třeba 3 třídy ke každé stránce - datová, prezenční, aplikační - kde aplikační bude sestavovat tu stránku dohromady, a v prezenční se jenom vytvoří objekty, které zavolají příslušné metody?

Nebo jak by to mělo vypadat..Může mi to prosím někdo osvětlit..

Díky
ronnie
Profil
Zkus nějaký tutoriál k frameworku, třeba k Zendu (http://akrabat.com/zend-framework-tutorial/), tam je popsána architektura MVC a stavba projektu na takovém frameworku, to by ti mohlo pomoci.
BetaCam
Profil
tssk

Jak říká ronnie přečti si dokumenty na téma MVC až pochopíš tuto architekturu budeš vědět co má která třída dělat. Zjistíš, že View s největší pravděpodobností ani nebude třída, ale bude to soubor který si zavolá pomocí třeba třídy parser a ta to poté pošle třídě pro výstup atd. Možností je mnoho, ale nejdřív si musíš něco přečíst o MVC.
srigi
Profil
Jednoznacne sa pripajam k ZF. Pri budovani OOP weby dojdes na to, ze objavujes koleso. A to je zbytocna praca, lepsie je sa sustredit na programovanie samotnej aplikacie ako na programovanie skeletonu toho kolesa.

Slovensky tutorial

Oficialne screencasty
BetaCam
Profil
srigi

Otázka je jak velký projekt má tazatel v plánu dělat. Pokud jde o malí projekt tak je použití například ZF tak trochu overkill. Navíc nevím co furt mají lidi s tím "objevováním kola". Kdyby lidstvo znova neobjevovalo "kolo" tak dnes nemáme spalovací motory, mobilní telefony či jiné věci co dnes běžně používáme k životu. Proto tedy nechápu jak může někdo pronést větu o znovu vynalézání kola, když bez toho by sme tady běhali s telefonama v krosně a tahali by sme za sebou kabel.
kajaman
Profil
není tak težké vytvořit a použít vlastní MVC framework + nějaký šablonovací systém (třeba Smarty) jako prezentační vrstvu. Možná je to znovuvynalézání kola, ale není nad to si to sám vyzkoušet :)

doporučuji pročíst toto!
tssk
Profil *
Co se týče velikosti webu, tak mám v plánu jakýsi "osobní web", kde bych chtěl umísťovat své reference, zajimavé projekty vypracováváné během studia, nějaké informace o mé osobě, a taky nějaký jednoduchý blog s možností přidávání příspěvků ke článkům. Nemám v plánu nic velkého v rozsahu vydávání třeba článků každý den prostě občas, když mě něco zaujme atd.

Z tohoto důvodu přemýšlím, zda si napsat jakýsi administrační režim pro daný web - čili bych chtěl nějaké prostředí pomocí, kterého bych mohl jedoduše spravovat obsah webu - přidávat nové projekty, a hlavně něco pro jednoduhé psaní článků a jejich prezentaci na webu, samozřejmě s možností administrace příspěvků. Uvažoval jsem i o využití nějakého redakčního systému, ale vzhledem k tomu, že web by měl sloužit jako ukázka mých prací a dovedností, chtěl bych něco vytvořit sám. Ovšem použití RS se nebráním.

OOP mě zajímá i vzhledem k budoucnosti, zda je lepší následující projekty vytvářet pomocí OOP než, pomocí klasického neobjektového programování v PHP. Následující odkazy si určitě pročtu..

Ještě k tomu šablonovacímu systému (Smarty) co si pod tím mám představit. Na jakém principu to funguje?
BetaCam
Profil
tssk
Ještě k tomu šablonovacímu systému (Smarty) co si pod tím mám představit. Na jakém principu to funguje?

Představit si pod tím máš šablonovací systém.
kajaman
Profil
no šablonovací systém je systém šablon :)
... jde o oddělení aplikační logiky od prezentační logiky (do značné míry).
zkus tohle: ronnieweb
srigi
Profil
Navíc nevím co furt mají lidi s tím "objevováním kola"

Ja len kcem naznacit, ze je zbytocnost sa sr.t s vyvojom napr. abstraktnej DB vrstvy alebo sablonovacieho systemu a zamerat sa na vyvoj vlastnej app.

BTW si myslim, ze aj na maly web je ZF viac ako vhodne (narozdiel od napr. symphony). Okrem toho je lepsie pracovat s frameworkom, ktory spravuje kopec opensource developerov ako sam makat na vlastnom frameworku. Mnozstvo vyvojarov skvor zaruci kvalitnejsi produkt (napr. coding standards alebo vyuzivanie designs patterns), co pri individualnom vyvoji nemozes ocakavat.

Tolko k obhajobe kolesa :-)
srigi
Profil
Ještě k tomu šablonovacímu systému (Smarty) co si pod tím mám představit. Na jakém principu to funguje?

Ide hlavne o to, ze nemas PHP kod v sablonach. Vyvoj sablony (dizajnu webu) mozes tak zverit nejakemu skusenemu grafikovi (musi sa vyznat v HTML) a ty sa budes venovat cisto iba biznis logike aplikacie. Priklad:

bezna aplikacia
<?php
include('header.inc');

if (isset($_GET['meno'])) {
  echo "<p>Vitaj $_GET['meno']</p>";
}

include('footer.inc');

Takyto kod nie je mozne rozdelit na dvoch ludi, tvoj grafik musi poznat PHP - slaba spravovatelnost aplikacie.

Naproti tomu pri pouziti sablon
<?php
require_once 'smarty/Smarty.class.php';

$smarty = new Smarty;

if (isset($_GET['meno']))
  $smarty->assign($_GET['meno'], $meno);

$smarty->display('index.tpl');

=============================================
=======  sablona (subor) index.tpl  =========
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>pokus</title>
</head>
<body>

  <p>Vitaj {$meno}</p>

</body>
</html>

Vidis, ze sablonu mozes vyvjat oddelene a clovek co sa tym vyvojom zaobera, vobec nemusi byt PHP programator. Takze asi tak.
BetaCam
Profil
srigi
Ja len kcem naznacit, ze je zbytocnost sa sr.t s vyvojom napr. abstraktnej DB vrstvy alebo sablonovacieho systemu a zamerat sa na vyvoj vlastnej app.

Tak to máš říct tak jak to myslíš a to, že je jednodušší použít již hotoví framework než si psát vlastní, ale nepleť do toho vynalézání kola.

Okrem toho je lepsie pracovat s frameworkom, ktory spravuje kopec opensource developerov ako sam makat na vlastnom frameworku.

A důvod tohoto?? Myslim si, že je lepší pracovat stim co mi víc vyhovuje a jestli je to vlastní nebo cizí framework je vedlejší. Promiň, ale radši budu pracovat v tom co mi vyhovuje než v tom co mi nevyhovuje a spravuje kopec opensource developeru.

Mnozstvo vyvojarov skvor zaruci kvalitnejsi produkt

Promiň, ale co je tohle za kravinu? Jeden človek může udělat kvalitnější produkt než množství vyvojářů a stejně tak to může bejt naopak.

(napr. coding standards alebo vyuzivanie designs patterns), co pri individualnom vyvoji nemozes ocakavat.

a co je zase tohle? "coding standards" bud umíš a používáš a nebo neumíš a potom je jedno jestli používaš framework který dodržuje coding standards nebo ne protože stejně nevíš co co znamená.

Návrhové vzory je jedna za základních znalostí OOP programátora a nevim tedy proč jejich využití vztahuješ k velkému počtu vývojářů.

Vzhledem k tomu, že dodržuju coding standards a využívám návrhové vzory tak je zdřejmě podle tvého názoru nemám ve své aplikaci očekávat. Oni se totiž z mé aplikace zdřejmě vypaří. Proč? No protože mou aplikaci nedělalo přece "Množství vývojářů". Prosimtě nenech se vysmát. Ve své aplikaci můžeš očekávat pouze to co umíš to co neumíš tam logicky nemůže být. Tak nevim co do toho pleteš počet developerů.

A ještě ohledně smarty.
Takyto kod nie je mozne rozdelit na dvoch ludi, tvoj grafik musi poznat PHP - slaba spravovatelnost aplikacie.
Naproti tomu pri pouziti sablon
Vidis, ze sablonu mozes vyvjat oddelene a clovek co sa tym vyvojom zaobera, vobec nemusi byt PHP programator. Takze asi tak.


Supr nemusí být PHP programátor, ale i tak se bude muset naučit minimálně syntaxi kterou používá smarty, ale dejme tomu. :)

<?php
require_once 'smarty/Smarty.class.php';

$smarty = new Smarty;

if (isset($_GET['meno']))
  $smarty->assign($_GET['meno'], $meno);

$smarty->display('index.tpl');

=============================================
=======  sablona (subor) index.tpl  =========
<html>
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <title>pokus</title>
</head>
<body>

  <p>Vitaj {$meno}</p>

</body>
</html>


Tak tohle je bomba kvuli výpisu "jména" si natáhl +- 170kB velké třídy. Musím uznat, že tímto krokem si zajisté zrychlil celí výpis jména tak o 500%. Gratuluji. :)
tssk
Profil *
ad šablony:

rychle jsem proletěl pár dílů v odkazu od kajamana a to smarty vypadá fakt zajímavě - určitě je to lepší pro odělení prezentační vrstvy od zbytku aplikace. Uvedený příklad se jménem mi taky nepřijde moc vhodný a v tomto případě použítí šablony je asi imho zbytečné, ale chápu ho jako ukázkový příklad, který měl osvětlit problematiku a tady takový příklad postačuje..Jeho praktické využití, ale taky nevidím moc růžově..

Co se týče toho grafika, tak ten mi většinou nahodí rozřezaný layout, který potom jenom pomocí xhtml a css "pospojuju" dohromady, takže podle mě grafik nemusí vědět vůbec nic o html popř. PHP.

Jinak vidím, že se tady rozchází názory na to, zda použít nějaký hotový framework (např. Zend) nebo si vše psát sám. Osobně momentálně nevím co je pro mě vhodnější, ale asi do začátku by bylo jednodušší využít nějakého frameworku, abych si dané věci "osahal". Do začátku budu pomalu něco číst o MVC :)
srigi
Profil
BetaCam >> nebudem flamovat, samozrejme tvoje argumenty su pravdive, ale prosim uvedom si, ze uzivatel tssk, kce OOP pouzit poprvykrat naostro. Myslis, ze takyto uzivel spravne imlemetuje vzor frontController? IMHO NOT. Kvli tomu mu odporucam uz overene riesenie.

Kcem len danemu uzivatelovi dobre poradit, no snad on moje rady stravi lahsie ako ty.
Ad priklad so Smarty - prosim nevytrhavaj ten kod z kontextu, tssk konkretne pisal (Smarty) co si pod tím mám představit. No povedz, nie je konkretny priklad to najlepsie co moze uzivatel dostat. Isto poznas porekadlo "jeden krat vidiet je lepsie ako 100x pocut". V ostrej aplikacii sa normalneho rozsahu sa pouzitie uz velmi oplati (nehovoriac o tom, ze Smarty podporuje cache).

Ale nebavme sa uz o hovadinach, namiesto toho uzivatelovi na zaciatok poradme.
Mastodont
Profil
tssk
da použít nějaký hotový framework (např. Zend) nebo si vše psát sám

To je dané osobní zkušeností: Třeba já jsem po třídenním studiu kódu Joomly pochopil, že když si CMS napíšu na míru sám, bude to rychlejší :-)
b022d
Profil *
strigi

Templatovací systém má oddělit prezentační a business logiku, nikoliv php a html kód!

Já kupříkladu používám lehce upravený bTemplate (jeho ranou versi), který podmínku výše bez výhrady splňuje a jeho kód má sotva pětadvacet řádků s tím rozdílem, že v šablonách používám "speciální" syntax klasického PHP.
tssk
Profil *
to srigi:
Ano tvůj příklad jsem pochopil správně, chtěl jsem osvětlit užití šablon, a tento příklad je myslím dostačující, takže děkuji za něho :-)

Jinak jsem včera zběžně prostudoval tento tutoriál popisující základní použití zend frameworku. Chce to ovšem si to zkusit napsat, na to zatím nemám čas. Jedná se tedy o MVC, takže zde již je oddělena ta prezentační vrstva od logiky aplikace. Tudíž tady již není třeba použít šablony? Chápu to dobře?

to Mastodont:
No právě to si taky myslím, že nepotřebuju žádný složitý CMS systém, jak jsem psal výše jde mi pouze o přidávání a jakousi administraci článků společně s komentáři, dále upload projektů + nějaký zběžný popis k nim. Zatím jsem teda nepřišel na to, jakým způsobem zabezpečit správné formátování toho článku potom na webu - nic jsem k tomu nehledal, jen o tom tak přemýšlel, jak to udělat.. Jo a taky bych tam chtěl mé reference. Takže si myslím, že nejde o nic složitého - aspoň doufám :-). Zatím to pouze vše nosím v hlavě a připravuji..
BetaCam
Profil
tssk
Jedná se tedy o MVC, takže zde již je oddělena ta prezentační vrstva od logiky aplikace. Tudíž tady již není třeba použít šablony? Chápu to dobře?

Není potřeba šablonovací systém typu smarty. Jen bych tě chtěl ještě upozornit, že to že je ZF koncipován jako MVC framework v podstatě nic neznamená dokud ty nebudeš vědět co do které vrstvy patří. Samotné rozdělení do vrstev bude zase záležet jen a jen na tobe.
suky
Profil
tssk
MVC je dobre pospsan v Navrhovych vzorech od Rudolfa Pecinovskeho (link). Jinak o Zend Frameworku jsem si dnes, vlastne uz vcera, koupil knizku (link), ale zatim jsem precetl jen uvod, nemuzu ji zatim tedy jednoznacne doporucit, ale za cenu 40E by urcite mela popsat ZF poradne a pochopitelne :D

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0