![]() |
![]() |
![]()
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:
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) |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nie do końca Cię rozumiem ale mogę podpowiedzieć:
Pamiętaj że zapis:
Jest równoważny z:
(IMG:style_emoticons/default/wink.gif) I cytat z jakiegoś kodu dotyczącego fabryki:
(IMG:style_emoticons/default/tongue.gif) Ten post edytował Sephirus 16.11.2011, 14:22:51 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 9.10.2025 - 02:10 |