![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 99 Pomógł: 15 Dołączył: 15.11.2007 Skąd: Nowogród Bobrz. Ostrzeżenie: (0%) ![]() ![]() |
W sumie to standardowy problem - hierarchia klas i kilka alternatywnych metod ich zapisu.
Scenariusz (w skrócie oczywiście) wygląda tak: Kod Encje: LOKACJA - name, - save(), MIASTO <- LOKACJA - być może jakieś specyficzne atrybuty, - getRaws(), BUDYNEK <- LOKACJA - specyficzne atrybuty - getRooms(), itp. (inne obiekty jak np. VEHICLE, który jest LOKACJĄ, ale ma specyficzne atrybuty i metody). Najbardziej odpowiedni wydaje się tu być wzorzec FACTORY. Tak wygląda mój szkielet implementacji tego wzorca:
Pominąłem tu dwie klasy *_Mysql analogiczne do *_Redis. I jakieś przykładowe przypadki użycia tego schematu:
No i pytania, przede wszystkim, czy to w ogóle jest dobrze? czy będzie wygodnie rozszerzać to o kolejne klasy (przykładowo, gdybym chciał dodać "Vehicle", to musiałbym utworzyć klasę "Vehicle" i dziedziczące z niej Vehicle_Redis i Vehicle_Mysql, ale potem rozszerzenie tego schematu o np. driver Postgresa oznaczałoby konieczność dopisania już 5 klas). A może jednak jakiś inny wzorzec by tu lepiej pasował? -------------------- Efemental.pl - nasz punkt słyszenia :: recenzje :: tylko metal!
Opensource'owy klon Cantra: http://github.com/magnax/Simtr |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 435 Pomógł: 40 Dołączył: 16.02.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
konstruktor nie może zwracać innej klasy, nie może nic zwracać. LocationFactory mogłoby mieć jedną statyczną metodę np "getLocation($source, $data = null): Location robienie tego konstruktorem jest baaardzo słabe. -------------------- Linkedin | ...
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 99 Pomógł: 15 Dołączył: 15.11.2007 Skąd: Nowogród Bobrz. Ostrzeżenie: (0%) ![]() ![]() |
No fakt i racja.
We wcześniejszej wersji miałem statyczną metodę getInstance(), tyle że dziedziczenie było prostsze (abstrakcyjna Location i dziedziczące po niej Location_Redis i Location_Mysql). Zaraz to poprawię. -------------------- Efemental.pl - nasz punkt słyszenia :: recenzje :: tylko metal!
Opensource'owy klon Cantra: http://github.com/magnax/Simtr |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 11:37 |