![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 71 Pomógł: 0 Dołączył: 5.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Temat pewnie wam znany i stary jak swiat. Pisze sobie swoj cms starajac sie zrobic to obiektowo. Dotychczas przejrzalem i przeczytalem wiele artykulow dotyczacych OOP i robie sie coraz glupszy bo z tego co rozumie to zastosowan jest multum, tylko ktore to najlepsze. mam taka klase
Pierwsze pytanie : Czy klasa User powinna miec funkcje takie jak Loguj, Rejestruj, Edytuj, Zmien Haslo i czy te funckje powinny miec juz "hardcoded" zapytania do bazy wewnatrz, patrz funckja loguj();. Wywoluje ja tak:
Jezeli cos tego pokroju jest ok to spoko. Teraz np dopisalem sobie taka funkcje to tej samej klasy, ktora jak dla mnie moglaby byc w kazdej prawie innej klasie :
Dzieki tej funkcji lapie sobie wszystko z bazy i w prosty sposob moge wywolywac wszystkie kolumny :
Bardzo podoba mi sie mozliwosc poboru rekordow i nazw wierszy tabeli w tak prosty sposob. Teraz do rzeczy : Funckja ta jest w Users ale generalnie moglaby byc w prawie kazdej innej klasie, np Products, Articles itp. Czy mam utworzyc osobna klase z ta funckja z ktorej jakos beda kozystac wszyskie inne klasy ? Czy ma byc to w klasie bazy danych, czy moze w jakies jeszcze innej ? Prosze o odpowiedzi i wyrozumialosc (IMG:style_emoticons/default/smile.gif) Ten post edytował rahul 20.08.2011, 20:50:56 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Cytat Ale sam także jestem przeciwnikiem __set i __get lub jakichś ich kopii typu set, get, clear, za miesiąc usiądziesz i będzie "eeee jakie ta tabela miała pola ...", raz wpisać i po problemie moim zdaniem, lub napisać generator co nie jest na prawdę trudne, sam tak robię i po problemie. Ale to jest tylko i wyłącznie wasze zdanie. Nie to że jestem jakimś fanbojem symfony, bo nie jestem, nigdzie go nawet nie wykorzystuje. Ale tam przykładowo jest obiekt ParametrBag, który operuje na tablicy. Najwięcej jest go chyba w obiekcie request. I powiedzmy teraz przykład, masz sobie tablicę $_SERVER lub jeszcze lepiej, tablicę $_POST. Nie wiesz na dobrą sprawę co w tej tablicy jest. To wtedy używasz za każdym razem isset żeby sprawdzić czy w tablicy jest dany klucz, tworzysz więcej niż 70 geterów/seterów, bo przecież to jest tablica post, nie wiesz jakich formularzy będziesz potrzebować na kolejnej stronie i co w nich będziesz mieć. To jak wy radzicie sobie z takimi sytuacjami? Dla każdego jednego klucza w tej tablicy piszecie osobno isset? No proszę was panowie, to jest masochizm i zachowanie które nie ma nic wspólnego z DRY, nie mówiąc już o KISS. Nie jestem ekspertem, ale masochistą też nie jestem. Jedno get() które mi sprawdza czy w danej tablicy jest dany klucz, jeżeli nie rzuci wyjątkiem, lub jakąś wartością domyślną (w symfony jest to wartość domyślna). I nie mówię tutaj o magicznym __get() tylko o normalnej metodzie get() która operuje na jakiejś tablicy, w przypadku użytkownika również na tablicy. Więc albo korzystacie bezpośrednio z tablicy $_POST i walicie dziesiątki issetów/warunków sprawdzających te tablicę, albo na "zaś" napierdzielacie pierdyliard seterów/geterów. Co ma wspólnego DCI z symfony z tym o czym mówię? http://components.symfony-project.org/depe...book/04-Builder istnieje jeden geter i jeden seter do pobrania obiektu, niema tak że dla każdego obiektu jest tworzony nowy seter/geter bo wtedy moim zdaniem to by było mało używalne. Jak wy sobie wyobrażacie przy każdej zmianie tablicy tworzenie nowego setera/getera? Pół biedy jak sami chcemy skorzystać z DCI, a w takim symfony gdzie klas jest dobrych kilka stówek, to miałbym tworzyć dla każdej klasy nowy seter/geter? Trochę dziwne macie podejście, co kto lubi. Dla mnie to jest masakra, o czym piszecie, rozumiem kiedy się wie dokładnie jakie metody ma mieć klasa, to i można tworzyć nawet 30 seterów/geterów chociaż ja już wtedy zrobił bym jednego wspólnego getera i setera. Ale w przypadku kiedy operujemy na danych które mogą być różne, pisanie na zaś albo dopisywanie nowego getera/setera i modyfikacja połowy systemu, bo przecież nie mogę skorzystać z get('klucz'), więc muszę połowę klas które z tego obiektu korzystają zmodyfikować. Nie wiem, jestem za minimalizmem, oczywiście nie przesadzonym żeby zaraz czarować __get/__set, ale zdecydowanie za minimalizmem, i raczej takie metody uniwersalne mnie kręcą niż napierdzielanie bezsensu pierdyliarda kolejnych metod, bo pomyślałem że mogę dodać nowe pole dla użytkownika.. Polecam wam przejrzeć w symfony, bo tam często i gęsto używa się tego typu podejścia. Jeszcze inny przykład, templatki, nie wiesz jakie zmienne będziesz dodawać, więc jest jedna wspólna metoda add/assign, jak wy, wyobrażacie sobie aby tworzyć pierdyliard nowych metod i modyfikowanie klas, dlatego że dodam do swojego layoutu jakieś dodatkowe dane? W wielu miejscach dostrzegam takie podejście i tak jak mówię, jesteście pierwszymi 2 osobami które mają jakieś halo odnośnie takiego rozwiązania. To oczywiście wasza sprawa jak piszecie, pewnie i tak więcej umiecie/wiecie odemnie, nie mniej chciałem przekazać swoje zdanie na ten temat. EDIT: Mając 70 publicznych właściwości w obiekcie get*() vs get('*') jest najmniejszym problemem. Ahh miałem jeszcze dopisać, 70 to jest get*(), jeszcze przecież masz 70 set*() co daje ci sumkę 140 metod, tylko po to żeby pobrać dane użytkownika (IMG:style_emoticons/default/smile.gif) a gdzie tutaj jeszcze inne metody. W 500 się zamkniemy? Ironia, ale niestety tak to wygląda z mojego punktu widzenia. Dla mnie jest to marnotrawstwo. Ten post edytował by_ikar 23.08.2011, 07:52:59 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 23:15 |