![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 29.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam prośbę o nakierowanie mnie na temat pierwszej zasady SOILID, jak można zastosować tą zasadę dla tych klas i takiego wywołania, w pierwszej klasie odwołuję się do drugiej, jednak znając życie będzie taka sytuacja że będę musiał przekazać więcej parametrów a nie tylko ID książki i będę musiał modyfikować 2 klasy.
Ten post edytował Nortonek 23.02.2014, 13:45:38 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Na sam początek: nie próbuj samemu robić mapowania bazy danych na model obiektowy (ORM). Jest to wbrew pozorom dosyć skomplikowane zadanie i bez odpowiedniej wiedzy ciężko Ci będzie zrobić cokolwiek co będzie miało jakieś zalety w porównaniu do "zwykłego klepania zapytań". Skorzystaj z Doctrine'a, w większości miejsc jest on całkiem dobrym przykładem zasad SOLID.
Co do Twojego kodu: 1. Powinieneś przekazywać obiekty jako argumenty, a nie ich wewnętrzne właściwości. 2. Jeżeli klasa ma za zadanie reprezentować pojedynczy obiekt (np. książkę) powinna nazywać się Książka, nie Książki. 3. Jedna klasa nie powinna zajmować się reprezentacją pojedynczej książki jak i operacjami bezpośrednio na bazie. Na dobrą sprawę powinieneś mieć tutaj kilka obiektów: - Książka reprezentujący pojedynczą książkę, - MenadżerKsiążek, którego metoda oddajZniszczonąKsiążkę przyjmie jako argument obiekt klasy Książka. Pojawienie się w nazwie klasy słowa "Menadżer" z reguły sugeruje jej zbyt szeroki zakres obowiązków, ale tutaj mamy tylko przykład, - KsiążkaDAO - po prostu DAO dla typu Książka (czy jakiś bardziej generyczny), wykorzystywany przez menadżera. 4. Nie powinieneś korzystać z globali. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 50 Pomógł: 0 Dołączył: 29.11.2003 Ostrzeżenie: (0%) ![]() ![]() |
Wyeliminowałem globale, mam nadzieję że prawidłowo, zmieniłem nazewnictwo klas i dodałem Dependency injection w klasie Bibliotekarki
Ten post edytował Nortonek 23.02.2014, 13:45:05 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Stan zniszczenia książki to właściwość samej książki, po co Ci do tego osobna klasa?
2. PaniBibliotekara to właśnie taki menadżer z mojego wcześniejszego postu. Powinna mieć ona metodę przyjmijZwracanąKsiążkę, która powinna jako argumenty przyjąć obiekty typu Książka oraz OsobaWypożyczająca. Wewnątrz tej metody mogłaby porównać stan książki sprzed wypożyczenia i w momencie jej zwrócenia. Jednak samo zapisywanie danych w bazie nie powinno już leżeć w jej zakresie obowiązków. PS. Tak jak mówiłem, zapoznaj się z jakimś gotowym ORM-em: będziesz tam miał przykłady jak poprawnie pisać kod. Zaoszczędzisz sobie masy czasu, wyrobisz zdecydowanie więcej dobrych nawyków, a przy okazji poznasz jakieś konkretne narzędzie. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 64 Pomógł: 0 Dołączył: 3.02.2009 Ostrzeżenie: (0%) ![]() ![]() |
Pozwolę napisać sobie jak ja bym to zrobił i why:
Podział odpowiedzialności: Ksiazka - reprezentuje obiekt domenowy ( naszą książkę ) Pani Bibliotekarka - reprezentuje repozytorium domenowe dla naszych książek i udostępnia API do zarządzania nimi ( w tym wypadku tylko oddawnaie zniszczonych / niezniszczonych książek ) |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 984 Pomógł: 41 Dołączył: 16.03.2002 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
Złota definicja: "Jeśli istnieje więcej niż jeden powód, żeby zmodyfikować klasę, to łamie ona zasadę SRP." Btw. słyszałem, że za używanie słowa kluczowego global mają ucinać ręce.
Ten post edytował em1X 9.05.2014, 19:21:32 -------------------- eh, co polska wódka to polska wódka
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 24.07.2025 - 15:36 |