Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [oop] Rozbijanie klas
sajegib
post
Post #1





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


Witam!

Mam taki pytanko do szanownego grona.

Załóżmy, że mam malutki czat oparty na OOP, do którego napisałem następujące klasy

  1. class database
  2. {
  3. //operacje na bazie, select, insert, update, same zapytania i zwracanie wyniku
  4. // dane docierające tutaj są już wyfiltrowane pod kątem SQLI itd.
  5. }
  6.  
  7. class chat
  8. {
  9. public function get_messages()
  10. {
  11.  
  12. //pobieram wiadomosci z bazy, zwracam tablice z wynikiem z bazy
  13. }
  14.  
  15. public function add_message()
  16. {
  17. // $this->validate();
  18. //dodaje wiadomosci po uprzednim wyescapowaniu
  19. }
  20.  
  21. public function validate()
  22. {
  23. //filtruje dane pod kątem sqli itd.
  24. }
  25.  
  26. }



to taki ogólny szkic, nie patrzcie na błędy, moje pytanie dotyczy raczej architektury całości (IMG:style_emoticons/default/smile.gif)

Teraz moje pytanie:
1. czy rzeczą pożądaną jest, by metoda validate była umieszczona w klasie chat, czy też powinienem stworzyć osobną klasę z metodami filtrującymi dane?
A może nie ma to żadnego znaczenia?
Gdyby było to coś większego, z pewnością zrobiłbym całą klasę walidującą (zawierałaby wtedy wiele metod)

2. Czy ma sens robić klasę zawierającą tylko jedną metodę?
Jak 'powinno się robić' i dlaczego?

Ten post edytował sajegib 23.04.2013, 23:08:17
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
PrinceOfPersia
post
Post #2





Grupa: Zarejestrowani
Postów: 717
Pomógł: 120
Dołączył: 18.04.2009

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


Cytat
1. czy rzeczą pożądaną jest, by metoda validate była umieszczona w klasie chat, czy też powinienem stworzyć osobną klasę z metodami filtrującymi dane?

to pewnie zależy od konkretnej sytuacji, ale jakbyś stworzył osobną klasę (albo choćby zestaw funkcji - nie bądźmy zbyt oop na siłę, bo to niezdrowe (IMG:style_emoticons/default/wink.gif) , to byś mógł ponownie użyć kodu walidacji do innych projektów/modułów niż tylko ten jeden czat.

Cytat
2. Czy ma sens robić klasę zawierającą tylko jedną metodę?

to zależy.

Ten post edytował PrinceOfPersia 24.04.2013, 00:53:45
Go to the top of the page
+Quote Post
skowron-line
post
Post #3





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


Single responsibility principle
Ja bym w tą stronę szedł.
  1. class database
  2. {
  3. public function __construct()
  4. }
  5.  
  6. class message
  7. {
  8. public function write($message)
  9. public function read()
  10. }
  11.  
  12. class validate
  13. {
  14. public function not_empty()
  15. public function email()
  16. public function is_valid()
  17. }
  18.  
  19. class chat
  20. {
  21. public function __construct(Database $db, Validate $validate)
  22. public function send($message)
  23. {
  24. // validacja
  25. // zapis
  26. }
  27. public function receive()
  28. }


Ten post edytował skowron-line 24.04.2013, 08:27:43
Go to the top of the page
+Quote Post
sajegib
post
Post #4





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


O to mi chodziło, dzięki!
Go to the top of the page
+Quote Post
q3trm
post
Post #5





Grupa: Zarejestrowani
Postów: 83
Pomógł: 1
Dołączył: 26.02.2013

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



1. Załóżmy, że mam do pobrania z formularza plik($_FILES) oraz jakąś opcję($_POST), czy odebrać te dane w jednej klasie?

  1. class DataForm
  2. {
  3. protected $file;
  4. protected $option;
  5.  
  6. public function __construct()
  7. {
  8. $this ->file = $_FILES['file'];
  9. $this ->option = $_POST['option'];
  10. }
  11. }


2. Atrybuty $file i $option zrobić statycznymi, czy lepiej przekazywać je za pomocą delegacji?
Go to the top of the page
+Quote Post
sajegib
post
Post #6





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


  1. public function __construct($_FILES['file'], $_POST['option'])
  2. {
  3. $this->file = $_FILES['file']'
  4. $this->option = $_POST['option'];
  5. }


Ten post edytował sajegib 28.04.2013, 19:20:32
Go to the top of the page
+Quote Post
q3trm
post
Post #7





Grupa: Zarejestrowani
Postów: 83
Pomógł: 1
Dołączył: 26.02.2013

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


Cytat(sajegib @ 28.04.2013, 20:19:20 ) *
  1. public function __construct($_FILES['file'], $_POST['option'])
  2. {
  3. $this->file = $_FILES['file']'
  4. $this->option = $_POST['option'];
  5. }


Super globalnych nie można deklarować jako parametrów metod.
Go to the top of the page
+Quote Post
sajegib
post
Post #8





Grupa: Zarejestrowani
Postów: 352
Pomógł: 59
Dołączył: 16.01.2013

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


przy tworzeniu obiektu:

  1. $post = $_POST.....
  2. $files =$_FILES...
  3. $x = new DataForm($post, $files);
Go to the top of the page
+Quote Post
q3trm
post
Post #9





Grupa: Zarejestrowani
Postów: 83
Pomógł: 1
Dołączył: 26.02.2013

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


Ciągle mam uczucie, że powinno się to rozdzielić na dwa kontrolery. Niby dane z jednego formularza, ale POST i FILES niewiele mają ze sobą wspólnego, każda pójdzie odrębną strukturą klas(patrząc na UML).
Go to the top of the page
+Quote Post

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: 23.08.2025 - 05:04