![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 18.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Chcę wyświetlić w sklepie informacje o produkcie. Mam moduł, który pobiera informacje o danym produkcie i przekazuje obiekt Produkt do Smarty. W skrócie wygląda to tak: pokazProdukt.php
Produkt.class.php
Zdjecia.class.php
Zdjecie.class.php
Po przekazaniu obiektu Produkt do Smarty z poziomu szablonu mam dostęp do wszystkich informacji z takiego oto drzewa: Kod Produkt + id + nazwa + ... + dodajacy Uzytkownik + id + login ... + zdjecia Zdjecia + lista 1 - Zdjecie + id + nazwaPliku + ... + dodajacy Uzytkownik + id + login ... 2 - Zdjecie + id + nazwaPliku + ... + dodajacy Uzytkownik + id + login ... 3 - Zdjecie + id + nazwaPliku + ... + dodajacy Uzytkownik + id + login ... Stworzenie takiej "hierarchii" może mieć sens jeśli chcemy wyświetlić wszystkie możliwe informacje np podpisując zdjęcia danymi użytkowników, którzy je dodali itp. Mam jednak parę wątpliwości:
|
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 81 Pomógł: 6 Dołączył: 24.07.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Podstawowym założeniem obiektowości jest enkapsulacja, tzn. w skrócie : "jak największe ograniczenie dostępu do obiektu z zewnatrz". Dobrym nawykiem przy pisaniu klasy jest nadawanie domyślne pól i metod jako private lub protected. Dostęp do pól z "zewnatrz" powinien zawsze odbywać się za pomocą "getterów" i "setterów".
-------------------- App 4 You - Aplikacje internetowe
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 18.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
A co z metodami takimi jak Dodaj, Usun, Edytuj, Zaloguj?
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 81 Pomógł: 6 Dołączył: 24.07.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Zasadniczo jeśli chcesz ich używać np. z poziomu Smarty, to dobrze jest wprowadzić jakaś publiczną metodę np. doAction($action,$type), która będzie swego rodzaju kontrolerem. Wtedy można łatwo manipulować dostępem do danych funkcji z zewnatrz.
-------------------- App 4 You - Aplikacje internetowe
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 18.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Może napiszę inaczej:
Mam plik PokazProdukt.php, w którym tworzę obiekt typu Produkt, pobieram dane produktu i przekazuje go do Smarty. W pliku PokazProdukt.php korzystam więc z klasy Produkt, która posiada metodę "public Usun() { // usuwanie z bazy produktu o id=$this->id}". Metoda Usun() jest publiczna ponieważ w pliku administracjaProduktami.php mam mozliwość usunięcia produktu w taki sposób: Kod <?php $produkt = new Produkt(1); $produkt->Usun(); ?> Tak więc metoda ta musi być publiczna (?). Oczywiśćie dostęp do administracjaProduktami.php i do operacji Produkt->usun() mają tylko użytkownicy z odpowiednimi uprawnieniami. Mimo wszsytko czy przekazywanie obiektu z publiczną metodą Usun() do szablonu smarty jest bezpieczne - czy jest to podatne na jakiś atak z zewnątrz? |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 81 Pomógł: 6 Dołączył: 24.07.2007 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli masz aplikacje zabezpieczoną pod względem "wstrzyknięcia kodu" (czytaj tutaj) to nie masz się o co martwić.
Natomiast, sama enkapsulacja jest ważna patrząc z poziomu stabilnego działania aplikacji. Najważniejsze jest to o czym pisałem w punkcie 1, czyli dostęp do pól za pomoca funkcji get... i set... . Idąc dalej, blokujemy krytyczne metody np. usuń przed dostepem z zewnątrz, jednocześnie dając możliwość jej wywołania przez wspomniany wcześniej kontroler. Tak na prawdę można napisać "dobrą" aplikację bez stosowania tych głównych założeń. Ale trzeba pamiętać że dobry projekt to też taki który jest poźniej łatwy do pielegnacji i rozbudowy. Wyobraź sobie że do dużego projektu który napisałeś bez użycia tych podstawowych zasad, zasiada po jakimś czasie ktoś inny, potem jeszcze ktoś inny. Robi się bajzel, co ostatecznie może doprowadzić do dziwnych zachowań w aplikacji. Dlatego tak ważne jest stosowanie się do ogólnych wzorców:) -------------------- App 4 You - Aplikacje internetowe
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 18.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za pomoc - już wszystko się wyjaśniło.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 07:26 |