Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] OOP - poprawnie?
emajl22
post
Post #1





Grupa: Zarejestrowani
Postów: 273
Pomógł: 21
Dołączył: 28.11.2010

Ostrzeżenie: (10%)
X----


piszę sobie coś obiektowo i mój index wygląda mniej więcej tak:
  1. // gora
  2. <?php
  3. require_once('./silnik.php');
  4. $api = new API;
  5.  
  6. $api->doContent($cos);
  7. ?>
  8. //dol

i teraz pytanie - dobrze to jest napisane? chodzi mi o samą logikę aplikacji...

klasa silnik.php wygląda tak:
  1. class API {
  2.  
  3. public function __construct() {
  4. // laczenie z baza
  5. // doklejanie innych klas i ich inicjowanie
  6. }
  7.  
  8. public function doContent($param) {
  9. switch($this->protect($param))) {
  10. case 'rejestracja':
  11. include('./class/rejestracja.class.php');
  12. break;
  13. case 'kontakt':
  14. include('./views/kontakt.php');
  15. break;
  16. default:
  17. if (isset($_SESSION['cos']))
  18. // zalogowany
  19. else
  20. include('./views/default.php');
  21. break;
  22. }
  23. }
  24.  
  25. public function protect($co) {
  26.  
  27. // zabezpieczanie danych z formularzy, getow itd
  28. return $co;
  29.  
  30. }
  31. }

w dobrym ide kierunku?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
KKH
post
Post #2





Grupa: Zarejestrowani
Postów: 2
Pomógł: 1
Dołączył: 11.02.2011

Ostrzeżenie: (0%)
-----


Jak dla mnie trochę popsuta hermetyzacja.

Metody doContent() i protect() klasy API odpowiadają dość różnym zadaniom. Nie powinno się projektować klasy, która robi zbyt wiele rzeczy na raz. Generalnie 1 rzecz = 1 klasa. Zbyt obszerna klasa przestaje mieć coś wspólnego z obiektówką, a staje się bardziej "modułem", tzn. czymś w rodzaju "przestrzeni nazw" dla strukturalnego zbioru funkcji. Czemu to złe? Chcesz np. coś zmienić w protect(). Być może protect() działa w prozumieniu z jakimś polem prywatnym, powiedzmy $prot. Ale czy $prot nie jest używana gdzieś w doContent()? Tego już nie jesteś pewien. Aby zmodyfikować jedną funkcjonalność muisz analizować kod, który nie ma z nią związku. Nie temu służy idea programzowania obiektowego.

Te Twoje API robi za kontroler, walidator (unieszkodlwiajacy niebezpieczne stringi - ale na co: HTML, SQL?) i za model, np. zarządza użytkownikami tak:

  1. if (isset($_SESSION['cos']))
  2. // zalogowany


A przecież gdy myślimy obiektowo, to aż się prosi by użytkownikowi odpowiadała osobna klasa.


Cytat(matix @ 12.02.2011, 20:25:28 ) *
W złym. Od tego jest framework - czyli Symfony czy też Zend (wiem, wiem są jeszcze inne równie dobrze, ale nie o to tutaj chodzi).
Po co chcesz wynajdować koło od nowa?


Kolega pisał: "dobrze to jest napisane? chodzi mi o samą logikę aplikacji...". Przecież coś nie może być napisane źle i nielogicznie tylko dlatego, że nie używa framewroka. Co innego, gdy rozważymy cel tego pisania. Mały, duży system. Nauka, praca, hobby? Dojdzie ktoś do zespołu itd.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 13:52