Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Co jądro, a co moduły
Forum PHP.pl > Forum > PHP > Object-oriented programming
Asmox
Witam
znam już nawet nieźle PHP i chciałem stworzyć swoją prawdziwą stronę, a może CMSa, na którym zbudowałbym moją witrynę. Postanowiłem odpuścić sobie pliki z treściami stron i wszystko oprzeć na bazie danych. Czytając nieco o czymś takim jak jądro aplikacji doszedłem do wniosku... że w ogóle tego nie rozumiem. Znaczy rozumiem tylko teorię - czyli że jest to taki najważniejszy element aplikacji, na nim się wszystko opiera, przez nie się wszystko uruchamia itd... natomiast moduły to takie małe dodatki, które wzbogacają funkcjonalność strony o ciekawe dodatki.
I to wszystko. Powiem szczerze, że często z analizą nowych rozwiązań jest tak, że nie mam do nich przykładów i bardzo szybko się gubię. Czy mógłby mi ktoś pokazać swoje przykładowe rozwiązanie? (1)
Chciałem też dojść co jest elementem jądra, a co tylko modułem. Jak dojdzie do tego MVC to już w ogóle się gubię.
Oczywiście moja pozycja w tej wypowiedzi wygląda na bardzo nieobeznaną - aż się prosi żeby odpisać, żeby sobie popatrzeć w googlach biggrin.gif Jednakże ja już patrzyłem np. na temat Jak pisać jądro - i znalazłem tam np. wzmiankę o DB co w MVC jest chyba klasyfikowane jako element Modelu i Smarty, czy jakiś inny system szablonowy co jest Widokiem, więc tak jakby się mieszało. Czy dobrze rozumiem, że albo się robi MVC albo jądro + moduły? (2)
I ostatnie pytanie: Kiedy opłaca się pisać aplikację w ten sposób (jądro + moduły)? (3)
Stawiałem numerki przy pytaniach, aby ktoś, kto chciałby mi odpowiedzieć wiedział o co tak naprawdę mi chodzi.
Pozdrawiam
Asmox
marcio
CO do pytania nr 3:
To zawsze sie oplaca, no chyba ze strona to jakies statyczne dane bez niczego ktore edytujesz poprzez edycje plikow na ftp :].

Co do jadra, to ogolnie sklada sie ono u mnie z: Dispatcher+Router ewentualnie Frontcontroller i glowne biblioteki/klasy potrzebne by strona ruszyla.

A modul jak to modul masz moduly/komponenty,plugin'y,filtry i do tego mozesz miec tez widget'y.
To juz od ciebie zalezy jak je zaimplementujesz ale na ogol sa ta elementy ktore nie sa potrzbne do dzialania strony tzn nie wystepuja w jadrze, lecz do jej tresci jak forum,shoutbox,news'y,logowanie,profil itp....itd...
Crozin
Hmm... możesz sobie podejrzeć jak w Symfony (w wersji 1.4, w wersji 2.0 jeszcze nie analizowałem sposób działania, ale patrząc po zapowiedziach podobno jeszcze lepiej to rozwiązano) rozwiązano zagadnienie pluginów. Tam plugin może pełnić rolę dowolnego elementu aplikacji... czy to kolejnych modułów (np. aktualności), czy jakiś narzędzi (np. do manipulacji obrazami).

Podstawą do zrobienia czegoś takiego jest to by to co Ty nazywasz jądrem (czymkolwiek to będzie ostatecznie) było na tyle elastyczne/konfigurowalne by ów plugin mógł wpłynąć na pracę całej aplikacji.
Asmox
Ok, czyli w jądrze mieści się wszystko co jest potrzebne do wyświetlenia strony. Ale nie rozumiem jak napisać do tego ładowarkę modułów.
Na przykład bardzo popularne newsy. To nie wiem jak by to można zrobić.
  1. // -------------plik index.php
  2. if(!$_GET['c']) $controller = "home";
  3. else {
  4. $controller = preg_replace("^[a-z0-9\-]+$", $_GET['c']) // Strona może zawierać tylko litery cyfry i myślniki np. www.abc.pl?c=nazwa-strony-z-podzialem-na-kategorie
  5. if (!$controller) $controller = "nopage"
  6. }
  7. $controller = "./katalog_controlerow/".$controller.".php";
  8. }
  9.  
  10. // ------------- plik /controllers/news.php
  11. class newsModule{
  12. // ładowanie klasy do obsługi baz danych
  13. // zapytanie do pobrania ostatnich 5 newsów
  14. // ładowanie szablonu
  15. // wyświetlenie wyników
  16. }

Gdy ktoś wpisze www.abc.pl?c=news (z .htaccess miało by wyglądać tak: www.abc.pl/news) to po prostu załaduje kontroler newsów i na tym kończy się rola jądra, jeśli można by to nazwać czymś takim. Czy jądro mogłoby spełniać jeszcze jakieś zadanie? Bo jak na razie wygląda to po prostu na frontcontroller i to wszystko.
marcio
Jadro to caly routing,dispatcher,frontcontroller(ktory jak dla mnie jest opcjonalny),ladowanie sciezek,config i ladowanie wszystkich komponentow itp....
U mnie klasa do ladowania wszystkiego wyglada tak:
  1. <?php
  2.  
  3. require_once(DIR_LIBRARY.'PluginFilter.php');
  4.  
  5. class Plugin {
  6.  
  7.  
  8. private $cfg;
  9.  
  10.  
  11. public function __construct() {
  12.  
  13. $this -> cfg = Loader::load('Cfg');
  14.  
  15. }
  16.  
  17. public function LoadPlugin($plugins, $action) {
  18.  
  19.  
  20. foreach($plugins as $key => $PluginName) {
  21.  
  22. if(file_exists(DIR_PLUGINS_CTRL.$PluginName.'.php')) {
  23.  
  24. require_once(DIR_PLUGINS_CTRL.$PluginName.'.php');
  25.  
  26. }
  27.  
  28. else if(file_exists(DIR_COMPONENTS_CTRL.$PluginName.'.php')) {
  29.  
  30. require_once(DIR_COMPONENTS_CTRL.$PluginName.'.php');
  31.  
  32. }
  33.  
  34. else {
  35.  
  36. Controller::Error(405);
  37.  
  38. }
  39.  
  40.  
  41. $obj = new $PluginName();
  42.  
  43. if(PluginFilter::CheckFilter($PluginName)) {
  44.  
  45. $html[$key] = $obj -> LoadFilter($PluginName);
  46. $PluginAction = (method_exists($obj, $action)) ? '_'.$action : '_'.$this -> cfg -> action;
  47. $html[$key] .= $obj -> $PluginAction();
  48. $html[$key] .= $obj -> RemoveFilter($PluginName);
  49.  
  50. }
  51.  
  52. else {
  53.  
  54. $PluginAction = (method_exists($obj, $action)) ? $action : $this -> cfg -> action;
  55. $html[$key] = $obj -> $PluginAction();
  56.  
  57. }
  58.  
  59.  
  60. }
  61.  
  62. return $html;
  63.  
  64. }
  65.  
  66.  
  67. }
  68.  
  69.  
  70. ?>

Musze ja jeszcze rozszerzyc, no i korzysta jeszcze z klasy PluginFIlter ktora laduje filtry i ich metody OnLoad,pre,post,metoda,OnUnload
Asmox
Fajnie, że chciałeś mi pomóc, ale niestety nic z tego nie rozumiem.
1. Co to są filtry?
2. Czy mógłbym zobaczyć przykładowe działanie takiego czegoś?
3. Czy jądro powinno odpalać się z index.php ?
4. Jak w ogóle wygląda główny plik jądra?
marcio
@Asmox bez obrazy, ale jesli nie wiesz co to router,disptacher etc....to najpierw poczytaj bo jak mam ci to wytlumaczyc.

U mnie plik index.php to 5 linijek kodu czyli odpalenie dispatcher'a i przekazanie mu calego routingu, po czym on wszystko odpala, tworzy instancje glownego frontcontrollera strony czyli Home a ten odpala wszystkie komponenty,pluginy,widget'y i filtry.

1)Filtry to tak jakby nakladka na jakas funkcjonalnosc systemu, np masz system news'ow chcesz do niego bbcode dodajesz filtr na dane metoda komponentu NEWS ktora wyswietla tresc z bbcode'm.

2)Dzialanie czego dokladnie?

3)ogolnie rzecz biorac index.php to zawsze glowny plik u mnie w pliku Init.php(przewaznie innych fw jest to plik bootstrap.php) includuje wazne klasy,konfig i routing a w index'ie tylko to odpalam poprzez proste:
  1. $dispatcher = new Dispatcher();
  2. $dispatcher->Exec($routing);


4)Nie wiem jak to wytlumaczyc , nie wiem co masz na mysli mowiac jadro, plik odpalajacy wszystko?Biblioteki ktore sa potrzebne?Ogolnie jadro nie sklada sie z jednego pliku co najwyzej moze byc 1 plik ktory wszystko odpali.
nu_moon
Z jednej strony, fajnie, że zadajesz takie pytania, ale z drugiej - zadajesz je trochę za wcześnie moim zdaniem. Z biegiem czasu, jak juz kilka większych aplikacji napiszesz zobaczsz z czym jest problem i WTEDY dopiero jest sens sie interesować czymś takim jak wzorce projektowe.

Jeszcze kilka etapów programowania przed Tobą, musisz trochę doświadczenia nabyć - wtedy nauczysz się poprawnie formułować problemy i samodzielnie lub z niewielką pomocą je rozwiązywać. Jak zaczniesz pisać realne projekty, będziesz przechodził pewnie te wszystkie etapy jakie przechodzi programista.
Zobaczysz, w czym pomaga podział aplikacji na modele / widoki / kontrolery, jak uciążliwe jest wypełnianie formularzy i walidacja danych, itp itd. i wtedy jest sens szukać rozwiązań, znając konkretne potrzeby i bolączki ...

Czy dobrze rozumiem, że albo się robi MVC albo jądro + moduły? (2)
MVC to tylko sposób separowania kodu na funkcje o podobnym działaniu. Podział na moduły / jądro możesz wyodrębnić w większych aplikacjach.
Jakkolwiek nie nazwiesz jądra / moduły to i jedno i drugie będzie się składać z podstawowych elementów MVC.


I ostatnie pytanie: Kiedy opłaca się pisać aplikację w ten sposób (jądro + moduły)? (3)

Opłaca się w momencie kiedy jesteś pewien ze baza programowa którą masz (jądro systemu) jest na tyle elastyczne i dobrze napisane, że jest sens w dłużeszej perspektywie na tym opierać swoje aplikacje i dalej je rozwijać, dobudowując nowe funkcjonalności.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.