Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Architektura klas
ActivePlayer
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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




Sytuacja:
Klasa ActiveRecord to klasa odpowiedzialna za kontakt z bazą danych (cos ala propel czy pear::DataObject)
klasy doc, news, product, user ect ect to klasy dziedziczące po ActiveRecord. W ten sposob udostępniam sobie łatwy dostęp do danych w bazie i modyfikację (update()). Jedziemy na php 4.4

Problem jest następnujący.

Duza ilość klas (na umlu przedstawiłem dwie - doc, news) posiada podobne właściwosci np. CreatedBy. Postanowiłem przenieść ten element o poziom wyżej. W ten sposob powstała klasa model_abstract_datetimeable (oznaczam ze odnosi się do modeli. doc, news itd, abstract oznacza ze nie moze byc uzywana sama, no i sam opis działania). W php nie mozemy dziedziczyć podwójnie tak więc w tym momencie model_abstract_datetimeable dziedziczy po activerecord, a doc po model_abstract_datetimeable. I jest w porządku (pomijając ułomności w wykonywaniu konstruktorów itp.). Problem pojawia się w momencie gdy chcialbym zeby doc, news itp były tez accesable, tzn posiadały metodę do sprawdzania dostępu do danego obiektu (system tak skonstruowałem, ze metoda jest zawsze taka sama). Aktualnie kod przeklejam ctrl+c, ctrl+v sad.gif. Nie powie mi nikt ze to błąd przy projektowaniu obiektów, bo php4 w swej ułomnosci na więcej nie pozwala. I teraz mozliwe rozwiązania(nie odpowiadające mi):
- nie widzi mi sie tworzenie iloczynu kartezjańskiego wszystkich model_abstract_*.
- Moglbym dziedziczenie zrobic tak: activerecord->accesable->datetmeable->doc, ale wtedy kazdy obiekt ktory jest datetimeable musiałby być accesable, a nie powinien.

Potrzebuję rozwiązania prawie jak a extends b,c sad.gif
Go to the top of the page
+Quote Post

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: 22.08.2025 - 07:22