Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 22.11.2009 Skąd: Gdańsk Ostrzeżenie: (0%)
|
Na wstępie chciałem się ze wszystkimi przywitać, ponieważ jest to mój pierwszy post.
Dobrze przejdźmy więc do rzeczy napisałem sobie klasę Routera, której kod możecie zobaczyć poniżej. Przede wszystkim proszę o obiektywną krytykę bo jest to moja pierwsza klasa. (IMG:style_emoticons/default/snitch.gif)
Teraz moje pytania dotyczące ów klasy: 1. Czy ogólny sposób napisania Routera jest zgodny z filozofią OOP? 2. Co mogę napisać inaczej (czyt. lepiej)? 3. W jaki sposób prawidłowo tworzyć URL'e (metoda createUrl, na którą jak widać w kodzie nie mam zupełnie pomysłu) (IMG:style_emoticons/default/sadsmiley02.gif) |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%)
|
Cytat 3. W jaki sposób prawidłowo tworzyć URL'e (metoda createUrl, na którą jak widać w kodzie nie mam zupełnie pomysłu) URLe tworzy się w sposób odwrotny do pierwotnego działania routera. Na podstawie określonych parametrów tworzy się ciąg reprezentujący je. Ty masz bardzo prostu Router, który ogranicza się do rozbicia względem znaku ukośnika, a więc generowanie to łączenie parametrów (ułożonych w odpowiedniej kolejności) znakiem ukośnika.Cytat Poza tym przy moim routerze zastosowałem wzorzec singleton, podczas jednego wywołania Router jest mi potrzebny w kilku obiektach, więc w ten sposób unikam bezsensownego powielania działania funkcji explode No to jeszcze raz: Singleton nie służy do dostępu do obiektu z każdego miejsca aplikacji!
Cytat Czy obiekt widoku powinienem tworzyć w dispatcherze czy jednak przerzucić to na kontroller? Nazwa kontroler sugeruje, że mówimy tutaj o MVC, a podstawowe założenie tego wzorca to: Kontroler decyduje jakiego widok(ów) użyć i jakie przekazać do niego(ich) modele - dodatkowo Kontroler może wysłać jakąś informację do Modelu
Ten post edytował Crozin 29.07.2010, 12:50:09 |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 22.11.2009 Skąd: Gdańsk Ostrzeżenie: (0%)
|
Przede wszystkim dzięki Crozin za tak wyczerpującą odpowiedź.
Daruj sobie tą notację (znowu zapomniałem jak się nazywa) z typem zmiennej w jej nazwie. Jeżeli masz mieć taki burdel w kodzie czy nazewnictwie, że nie mógłbyś się połapać w nim oznacza to, że coś masz źle napisane. Jest to tzw. notacja węgierska (IMG:style_emoticons/default/winksmiley.jpg) $this->sPath = $_SERVER['PATH_INFO']; - jedna z zasad OOP: za wszelką cenę unikać pobierania jakiś globalnych danych z wnętrza metod. Co jeżeli z jakiś przyczyn będziesz chciał określać parametry nie na podstawie tej zmiennej tylko np $abc? Normalnie nie stanowi to problemu: new Router($_SERVER['PATH_INFO']); lub new Router($abc);, a u Ciebie trzeba babrać się w kodzie klasy. Trafna uwaga. Kompletnie nie wziąłem tego pod uwagę. Nazwy metod zaczynające się na set czy get z reguły służą do oznaczania tzw. publicznych setterów i getterów - wprowadzasz w błąd. Jeżeli potrzebujesz jakiejś metody, która uruchomi się na początku działania obiektu lepiej nazwać ją setup lub setupSomething. Ale jeżeli później chce pobrać pewne dane z owego Routera to metody get są poprawne. Dobrze rozumuję? Router::getServerName() - router nie powinien zajmować się takimi rzeczami. W ogóle to te metody set*() u Ciebie są na siłę wepchane. Możesz ich zawartość zbiorczo wrzucić w jedną metodę, albo bezpośrednio w kontrolerze wywołać. Każda z Twoich prywatnych metod powinna być co najwyżej chroniona. Mógłbyś rozwinąć twoją myśl? Bo nie za bardzo "łapię". Nazwa kontroler sugeruje, że mówimy tutaj o MVC, a podstawowe założenie tego wzorca to: Kontroler decyduje jakiego widok(ów) użyć i jakie przekazać do niego(ich) modele - dodatkowo Kontroler może wysłać jakąś informację do Modelu Jeżeli chodzi o Kontroler to powiedz mi jakiego typu informację może on wysyłać do Modelu? Kontroler ma być pośrednikiem informacji pomiędzy Modelem a Widokiem? |
|
|
|
mathev19 [Klasa] Router 28.07.2010, 15:38:06
Luneth To createUrl bym raczej sobie w ogóle odpuścił, gd... 28.07.2010, 23:52:59
mathev19 Przede wszystkim to dzięki za odpowiedzi na moje p... 29.07.2010, 11:20:18
Luneth Wiec co proponujesz miast singletona? Wzorzec reje... 29.07.2010, 16:49:25
Crozin Rejestr? Jeszcze większe zło. Po co Ci w ogóle tut... 29.07.2010, 16:55:39
Luneth Żeby bezsensownie nie były w koło macieju wykonywa... 29.07.2010, 17:48:48
Crozin Cytatsingleton nie,rejestr nie, jak to rozwiążesz?... 29.07.2010, 20:40:41 
mathev19 Teraz to mi ładnie wszystko wytłumaczyłeś i już ... 29.07.2010, 20:59:52
Luneth @ Crozin
Dependency Injection, ok, ale wszędzie mu... 2.08.2010, 01:43:49
Crozin CytatNo właśnie. Doczytałem się, że jest to wzorze... 2.08.2010, 05:30:01
Luneth Załóżmy, że mam projekt, który realizuję w myśl MV... 2.08.2010, 06:27:55
Crozin A niby dlaczego miałoby być tego przy takim projek... 2.08.2010, 07:26:14
Luneth 'Nieszczęsny' fragment ($this->con... 2.08.2010, 08:02:14 ![]() ![]() |
|
Aktualny czas: 10.06.2026 - 12:34 |