Autor Zpráva
mala_eva
Profil
Dobrý den ráda bych se Vás zeptala, zda někdo neví kam se řadí z hlediska architektury webové aplikace jako např. rezervační systém, Nebo všechny takové aplikace, jejichž skripty neobsahují pouze PHP kód,ale také html. A přes tyto skripty se pak aplikace spojuje s databází? Třívrstvá architektura to není, jelikož prezetační a aplikační vrstva je na sobě závislá. Patří to teda mezi dvouvrstvé architektury typu:Architektura s výkonem soustředěným na serveru? Kde jedna vrstva na serveru - aplikační a datová splývají a prezentační vrstva je na klientu? Nebo se to takovým způsobem ty vrstvy u dvouvrstvé architektury nedělí. Nebo se tyto webové aplikace nikam nezařazují? Mám v tom docela guláš, prosím o vysvětlení, nebo alespoň odkázání na nějaký kvalitní zdroj. Moc moc děkuji
ShiraNai7
Profil
mala_eva:
Dobrý den ráda bych se Vás zeptala, zda někdo neví kam se řadí z hlediska architektury webové aplikace jako např. rezervační systém,

To záleží na tom, jak je kód programu strukturován.

Nebo všechny takové aplikace, jejichž skripty neobsahují pouze PHP kód,ale také html. A přes tyto skripty se pak aplikace spojuje s databází?

Jak souvisí míchání HTML do PHP se spojením k databázi?

ebo alespoň odkázání na nějaký kvalitní zdroj.

Google
mala_eva
Profil
ShiraNai7:
To záleží na tom, jak je kód programu strukturován.
Pomohla by ukázka kódu? Kterou mám na mysli?

Jak souvisí míchání HTML do PHP se spojením k databázi?
tím jsem měla na mysli ze PHP skrip obsahuje jak html tak i příkazy pro práci s databází.

Google
Hledám, jak nejlíp umím, avšak žádný praktický příklad, na kterém by bylo jasně vidět, jaká struktura kódu do jaké architektury patří, jsem nenašla.
ShiraNai7
Profil
Pročti si toto. Upřímně jsem ještě neviděl nikoho řešit jakousi "architekturu" webové aplikace. Nehledal bych za tím žádnou vědu a spíš se soustředil na funkčnost a bral v potaz alespoň základní principy OOP.
mala_eva
Profil
Děkuji.
ShiraNai7
Profil
mala_eva:

Není zač. Jen nezapomeň, že je důležitá hlavně praktičnost a funkčnost. Implementovat nějaké komplikované návrhové vzory pro systém, který není nějaký šílený výtvor obrovské korporace, a na kterém nepracujou stovky lidí, je zbytečné :) Nejsem v pozici, abych měl někomu nařizovat co a jak má dělat - je to jen můj osobní postřeh, kdy jsem několikrát zbytečně předělával půlku jednoho systému a nezískal tím vůbec nic. Stačí pěkná adresářová struktura, class autoloader, oddělit PHP a HTML pomocí template systému, databázový wrapper sprostředkovávající připojení k databázi... To jsou základní věci pro pěkně kódovanou OOP aplikaci. Nevím, jak vypadá systém, na kterém pracuješ (nebo budeš/chceš), ale klidně zde obrať s dalšími dotazy. Není potřeba zakládat další topic, pokud by to nebylo úplně mimo téma.
mala_eva
Profil
No já právě vytvářím úplně jednoduchou aplikaci. A když jsem si pročítala diskuse a články, tak jsem přávě narazila na pojem třívrstvá a dvouvrstvá architektura. Z článků vyplynulo, že ty třívrstvé architektury dnes používají všechny moderní vebové aplikace, tak mě právě zajímalo jak to s mým kódem je:) Taky tak nějak i z těch článků jsem pochopila, že do třívrstvé architektry patří jak jsi výše popsal - objektově orientovaný kód, a použití nějaké grafické šablony na oddělení kódu od vzhledu. Bohužel objektově orientováné programování je pro mě zatím velká neznámá, kterou teprv zkoumám. Tak by mě zajímalo jestli je ještě přípustné psát kód, viz.ukázka níž, nebo je to chyba. A jestli se to dá někam do těch architektur zařadit, nebo radši ani ne:)A kód nikde neukazovat:-D

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> 
 
<table> 
<tbody>
<tr>
   <?php 
    $dotaz=mysql_query("select * from pohlavi");           
   ?>  
 <th>  <label for="pohlavi">Pohlaví</label> </th> 
 <td>  <select name="pole_pohlavi[]" size="1"> 
   <?php 
    while ($radek=MySQL_Fetch_Array($dotaz)):
   ?>                         
       <option value="<?php echo $radek["id_pohlavi"]?>"><?php echo $radek["pohlavi"]?></option>
   <?php 
    endwhile;
   ?>
       </select>   
 </td>  
</tr>

<tr>
  <?php 
   $dotaz=mysql_query("select * from strava");           
  ?>   
 <th>  <label for="strava">Strava</label> </th>
 <td>  <select name="pole_strava[]" size="1">
  <?php 
   while ($radek=MySQL_Fetch_Array($dotaz)):
  ?>       
       <option value="<?php echo $radek["id_strava"]?>"><?php echo $radek["nazev_stravy"]?></option>
  <?php 
   endwhile;
  ?>
       </select> 
 </td> 
</tr>

<tr>
      <td colspan="2" class="spoj"> <p class="okraj"> <input type="submit" value="Uložit" name="ulozit"> </p> </td> 
</tr>

</tbody>
</table> 

</form> 

ShiraNai7
Profil
Je to samozřejmě přípustné. Jde o procedurální styl kódu a není na tom nic špatného - proti gustu žádný dišputát :) Můj první redakční systém je psaný přesně takto. OOP je přehlednější, ale není třeba to tak psát, když ještě nevíš co a jak (tutoriálů je na internetu určitě spousta). Jinak ta třívrstvá architektura může být Model-view-controller, ale sám to nepoužívám, nebo si toho alespoň nejsem vědom. Mám strukturu systému takovou, jaká mi vyhovuje a slouží svému účelu stejně, akorát bez zbytečného balastu navíc.
Mastodont
Profil
Na začátečníka to není špatné. Dalším krokem by bylo získávat $dotaz přes funkci jako celé pole + následně namísto while použít foreach.
ShiraNai7
Profil
Mastodont:
K tomu není důvod, zbytečně by pak byly v paměti najednou všechny řádky.
Mastodont
Profil
ShiraNai7:
Jak jinak odstíníš model od view?

Ukázka je třeba na http://www.symfony-project.org/book/1_1/02-Exploring-Symfony-s-Code, část "Isolating the Presentation".
ShiraNai7
Profil
Mastodont:
Prostě můj DB wrapper funguje takto:

$q = $databaze->select('*')->from('tabulka')->exec();
while($r = $q->row()) {
  // neco
}


Zkus si pracovat třeba s 10 000 záznamy, když budeš načítat úplně všechny řádky do paměti. A jakési "Isolating the Presentation" se řadí právě ke zbytečnému balastu navíc. Zkus si přečíst, co jsem napsal. Prostě je to způsob, jakým ten wrapper funguje. Jak to souvisí s nějakou prezentací? Mít na všechny načítání z databáze metodu nebo funkci? Opět zbytečný balast navíc. S DB wrapperem pracují třídy takovým způsobem, aby bylo zachováno zapouzdření (tj jedna třída nepracuje s tabulkami další třídy). Je to vnitřní pochod dané třídy a je úplně jedno, jak funguje.
mala_eva
Profil
Za oba odkazy Vám děkuji, konečně si dokážu představit jak v reálu vypadá to oddělování vrstev:)

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0