![]() |
![]() |
![]()
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ąć ![]() -------------------- "The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of the development time."
Tom Cargill, Bell Labs |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 04:55 |