![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 2 Dołączył: 26.10.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Zaczynam przygodę z programowaniem obiektowym. Jako przewodnik służy mi książka 'PHP. Obiekty, wzorce, narzędzia' Matta Zandstry. Jednak nie mogę tam znaleźć jednoznacznej odpowiedzi na dość istotne pytanie. Wyobraźmy sobie hipotetyczną podstronę która ma wyświetlać różne artykuły z bazy danych. I tutaj nasuwa się pytanie: w jaki sposób powinna być skonstruowana? Czy jedna klasa, odpowiadająca za artykuły powinna je wyświetlać, edytować, dodawać etc. na podstawie parametru $id? Np.:
Czy może powinna istnieć osobna klasa reprezentująca jako taki artykuł. Mam tutaj na myśli sytuację w której z każdego pobranego artykułu tworzy się nowy obiekt:
I w tej sytuacji każdy artykuł jest osobnym obiektem. Które rozwiązanie jest lepsze? Odpowiedź na to pytanie myślę że dość mocno rozjaśni mi ideę OOP. ![]() Pozdrawiam. Ten post edytował Barton 18.04.2012, 12:32:40 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Pomyśl w tym przypadku o artykule jako pojedynczym wierszu z bazy danych na którym dokonujesz różnych operacji (czyli np setId, setAuthor, getPublishDate). Czyli rozwiązanie numer 2 i w przyszłości znacznie ułatwisz sobie pracę.
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
setId? Id ma być unikalne i jego nie zmieniamy, broń boże
-------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Wyświetlanie i edycja to zadania dla zupełnie innej klasy, a w przypadku edycji nawet dla kilku klas, którym trzeba odpowiednie dane przekazać (chodzi o klasy widoku i formularza). Natomiast to co powinna realizować klasa artykułu to interakcja pomiędzy aplikacją a bazą danych - de facto jest to tzw. model danych, będący jednym z elementów wzorca MVC (model-widok-kontroler). Model ten, jak już wspomniałem powinien odpowiadać za interakcję/wymianę danych pomiędzy aplikacją a bazą danych, czyli:
To tak w wielkim skrócie, bo powyższej klasie jeszcze bardzo wiele brakuje. Natomiast wyświetlanie powinno już odbywać się w innym miejscu, a to zależy od architektury aplikacji (we wzorcu MVC wyświetlanie odbywa się w widoku, przy czym kontroler przekazuje do niego odpowiednie dane). Niemniej wyglądałoby to tak:
EDIT: Powyższa klasa i sposób jej wykorzystania to tylko przykłady, które w rzeczywistości wymagają jeszcze trochę (lub raczej dużo) pracy. Ten post edytował mortus 18.04.2012, 18:10:33 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
setId? Id ma być unikalne i jego nie zmieniamy, broń boże
W widoku wybranie z tego. -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
@viking: Jeśli już, to metoda powinna się nazywać raczej getId(), a nie setId() - get = pobierz, set = ustaw.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 380 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Naprawdę? Chyba ustawiasz danymi z bazy (set) które pobierasz w widoku (get). Nazywa się to (polskie tłumaczenie sobie odpuszczę) domain object / model. Mówimy w swoich przykładach zastosowań o 2 różnych rzeczach. Ty zrobiłeś z tej klasy bezpośredni mapper. Ja mówię o takim podejściu http://martinfowler.com/eaaCatalog/dataMapper.html
http://stackoverflow.com/a/7109595 http://mwop.net/blog/202-Model-Infrastructure.html Ten post edytował viking 19.04.2012, 05:34:12 -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 15:47 |