Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wzorzec fabryki
Orzeszekk
post
Post #1





Grupa: Zarejestrowani
Postów: 260
Pomógł: 14
Dołączył: 8.09.2011

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


Pytanie do mądrzejszych ode mnie forumowiczów.

Mam klase np. abstractMessage która jest szkieletem zapisujacym message do bazy danych.

następne z klasy abstractMessage tworze klasy pochodne np SMSMessage, EmailMessage.
Rodzaj wiadomosci przechowuje w polu $type obiektu abstractMessage, dzieki czemu wiadomo czy to SMSMessage, i EmailMessage.

Potrzebuje wzorca fabryki (metody wytwórczej?), tylko poprawnego. Teraz bym to zrobił tak:

  1. class abstractMessage{
  2. public static function load($databaseRow)
  3. {
  4. [....]
  5. switch ($databaseRow->type)
  6. {
  7. case TYPE_SMS_MESSAGE: return new SmsMessage($databaseRow); break;
  8. case TYPE_EMAIL_MESSAGE: return new EmailMessage($databaseRow); break;
  9. }
  10. }
  11. }

jednak takie rozwiązanie jest podobno do kitu ponieważ w przypadku jeżeli powstaną nowe typy dziedziczące po abstractMessage to będe musiał zmodyfikować ten switch tworzący obiekty, a w ten sposob zlamie zasade otwarte-zamknięte - zamiast rozszerzać klasę dodajac metody modyfikuję istniejący kod w celu rozszerzenia funkcjonalności.

No a jeżeli nie utworze odpowiedniego typu (SMSMessage, EmailMessage) to nie będę mógł użyć ich specyficznych metod.

Więc jak to poprawnie rozwiązać? Chcę rozwiązania na maksa poprawnego z dobrymi praktykami programistycznymi, bo już dostałem niedawno durszlakiem pełnym kodu spagetti mocno w głowę i chcę tego uniknąć (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 7.10.2025 - 10:30