Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> podzial akcji na klasy w MVC
squid
post 4.08.2005, 21:19:37
Post #1





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

Ostrzeżenie: (0%)
-----


Moze to i gdzies bylo ale jesli tak to mi umknelo winksmiley.jpg
W sumie moj obecny sposob rozumienia i przechowywania akcji jest taki:
akcja to jedna metoda danej klasy metody w tej klasie wykonuja podobne zadania np. wyswietlanie newsow, artykulow. Wszytkie akcje/metody o podobnym dzialaniu grupuje w kasy ale nie ejstem pewnien slusznosci tego rozwiaania. U mnie akcje sa kompleksowe, to znaczy ze jedna akcja wykonuje wszytkie operacje jednego requesta, nie mam lancucha akcji ale moze go wprowadze.
I zasadnioczo moje pytanie brzmi czy jedna akcja to powinna byc jedna klasa? jesli mialbym lancuch akcji to spowalnialo by to kod bo bym musial np. 10 inludow robic. Jesli zrezygnuje z lancuchow akcji i pozwole jednej akcji utworzyc dane dla widoku to wtedy strategia jedna klasa jedna akcja moze przyniesc przyspieszenie interpretacji kodu.
Jak Wy to robicie?questionmark.gif Gdzie umieszczacie akcje i jak je grupujecie?
smile.gif


--------------------
Jeśli życie to kara to nieźle nabroiłem ;-)
Go to the top of the page
+Quote Post
Vengeance
post 4.08.2005, 21:51:17
Post #2





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


U mnie każda akcja to oddzielna klasa spełniająca dany interfejs.
A grupować moge to dowolnie (najczęściej nie grupuje w ogole, albo korzystam z katalogów) dzięki omawianemu tu __autoload().

Pozatym przy dobrze rozdzielonych zadaniach w framework uważam iż zmiana sposobu tworzenia akcji (z takiego gdzie akcja to klasa, lub metoda klasy) nie powinno zająć wiele czasu :]


--------------------
Go to the top of the page
+Quote Post
Kinool
post 4.08.2005, 22:09:58
Post #3





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

Ostrzeżenie: (0%)
-----


ja stosuje podobnie tzn klasy sa hermetyczne sluza do konkretnych celow, oddzielna dla artow, newsow, produktow itp. wewnatrz danej klasy sa metody (akcje) wykonujace zadania, hermetyczne dlatego ze np. caly modul newsy zamkniety jest w konkretnej klasie i tylko ona jest potrzebna do dzialania newsow


--------------------
Go to the top of the page
+Quote Post
NuLL
post 4.08.2005, 22:29:16
Post #4





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Widze bawimy się w moduły tak nie ja jedyny wykorzystuję MVC po swojemu.
A mnie głowna klasa modułu pełni rolę minikotrolera który może uruchomić tylko konkretne akcje - ot, cała filozofia winksmiley.jpg
Z kodowniczego punktu punktu widzenia trochę głupio zamykać każdą akcję w konkretny plik ale jest to rozwiązanie za pan brat z wydajnością - co jeśli klasa, której motedy są akcja ma 150 kb :?:
Tak więc akcja to klasa, a moduł to taki mały kontroler winksmiley.jpg


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Vengeance
post 4.08.2005, 22:36:19
Post #5





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Null, tak tez mozna. FrontController wybiera odpowiedni ApplicationController (np. dla newsow, artow, forum) ktory z kolei wywoluje dostepne akcje :]

Cos ala jak w tym przykladzie:
http://www.phppatterns.com/index.php/artic...cleview/19/1/1/


--------------------
Go to the top of the page
+Quote Post
squid
post 4.08.2005, 22:41:58
Post #6





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

Ostrzeżenie: (0%)
-----


to jest tak: jesli nie ma lancucha akcji to znaczy ze jedna akacja robi wszystko i tutaj zamkniecie jednej akcji w jednej klasie moze miec troche sensu bo nie wczytujemy duzej klasy tylko kawalek potrzebnego kodu.
Ale jest jeszcze jedna kwestia: staram sie aby to co robi akcja bylo w miare atamowe tzn. a kcja wie o co poprosci obiekt danych i jakie operacje na tych danych wykonac a jesli potrzeba wykonac cos jeszcze to w klasie umieszczam dodatkowe metody tym razem opatrzone operatorem protected (w sumie mozna je rozpatrywac jako akcje) ktore robia cos dodatkowego, grupujac akcje o podobnych funkcjach w jednej klasie moge w roznych akcjach wykozystywac te sama akcje pomocnicza co poprawia spojnosc kodu i zmniejsza liczbe includow.
Chyba sam sobie odpowiedzialm na pytanie smile.gif Raczej zostane przy swoim pomysle:
klasa = kilka akcji o podobnych funkcjach + wspolne akcje pomocnicze.

Ten post edytował squid 4.08.2005, 22:45:41


--------------------
Jeśli życie to kara to nieźle nabroiłem ;-)
Go to the top of the page
+Quote Post
NuLL
post 4.08.2005, 23:00:37
Post #7





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


@squid - osobiście nie podoba mi się ten pomysł z akcjami pomocniczymi - pokaże kod i chyba będzie najłatwiej

  1. <?php
  2.  
  3. class newsAdd implements iAdministrateAction
  4. {
  5. public function perform(iContext $context)
  6. {
  7. //w tym miejscu dostajemy cały kontekst i trzeba wyczyść treść z tagów HTML co nas
  8. ępuje
  9. $tresc=componentManager::get('DataFilterManager')->prepareFilter('htmlTags')->execute($context->get('tresc'));
  10. }
  11. }
  12.  
  13. ?>

i mamy juz oczyszczona tresc newsa pobrana z kontekstu i akcji pomocniczych brak smile.gif Rozwiązanie jak dla mnie zdecydowanie lesze jakoże dany filtr można wykorzystać gdzie sę chce smile.gif Pozatym ładniejsze winksmiley.jpg

Jakieś wytłumaczenie - u mnie największe klasy mają nazwę komponentu. Tutaj jest wyciągany filtr danych czy też zmiennych i on wykonuje całą robotę za Ciebie.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
bela
post 4.08.2005, 23:10:23
Post #8


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


A po co podział interfejsow na administracyjne? Akcja to akcja, a interfejs jest uogólnieniem więc w ogóle nie powinno go obchdzić jakiego to typu akcja.


--------------------
Go to the top of the page
+Quote Post
Vengeance
post 4.08.2005, 23:14:45
Post #9





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Co najwyżej zrobić abstrakcyjną klasę akcji admistracyjnych, jeżeli dla nich ma być zawsze wykonywane coś nadzwyczajnego :]


--------------------
Go to the top of the page
+Quote Post
NuLL
post 4.08.2005, 23:14:58
Post #10





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


@Bela_666: to było pisane z palca - pierwsza myśl. FilterManager napisano, a o panelu admina jeszcze nie myślałem tongue.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
squid
post 5.08.2005, 09:12:29
Post #11





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

Ostrzeżenie: (0%)
-----


@NuLL jak dobrze rozumiem to sugerujesz aby moje "akcje pomocnicze" pogrupowac w klasy-komponenty wywolywane statycznie tak?
pomysl nawet ciekawy tylko znowu liczba dolaczanych plikow mi sie inkrementuje a mam juz ich ok 10 cos trzebaby z tym zrobic.
Po za tym pomysl komponentow sie nie sprawdzi jesli ta dodatkowa akcja ma byc cos specyficznego dla danej grupu akcji/operacji np. w kasie administracyjnej mam metode, ktora tworzy opcje dla menu admina nie ma tu sensu umieszczac jej jako komponent bo nikgdzie indziej nie bedzie uzywana i nawet nie powinna.


--------------------
Jeśli życie to kara to nieźle nabroiłem ;-)
Go to the top of the page
+Quote Post
Vengeance
post 5.08.2005, 13:03:35
Post #12





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Jezu, ludzie, przeciez nie oto chodzi by do wszystkiego miec po tysiac klas :] Sposob Squid-a nie jest zly.

Mozesz sobie zrobic klase News z metodami. Gdy metoda zaczyna sie (jej nazwa) od prefixu action_ to jest mozliwa do wywolania przez kontroler. Wszystkie inne metody moga sluzyc po prostu odpowiedniemu podzialowi zadan, tak by w ciele jednej metody nie zamieszczac wszystkiego. Ja tak kiedys robilem i jest OK.

Zreszta to samo gdy akcja jest oddzielna klasa. Mozesz porobic sobie pomocnicze metody i luuzik.


--------------------
Go to the top of the page
+Quote Post
squid
post 5.08.2005, 18:54:27
Post #13





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

Ostrzeżenie: (0%)
-----


@NuLL: zastanawiam sie nad tym Twoim componentManager'em i mam pyanie: co przemawia za tm zeby uzywac czegos takiego zamiast autoloadera ( taki mam pomysl aby autoloader zajmowal sie ladowaniem wszystkiego zarodno niejawinie jak i jawnie jak w wypadku componentManagera ).

Inny moj pomysl polega na tym zeby w konfiguracji lub czesciowo automatycznie ladowac wszystkie pliki z klasami ( lacznie z komponentami ) na starcie skryptu przez autoloader (oczywiscie tylko te klasy ktore sa potrzebne do obsluzenia danej akcji) i udosepniac ich interfejsy poprzez kontroler ( chocciaz to moze byc problematyczne przy dodawaniu nowych parametow do metod wiec mozna przekazywac referencje do obiektu ). Co Wy na to?

Ten post edytował squid 5.08.2005, 18:55:40


--------------------
Jeśli życie to kara to nieźle nabroiłem ;-)
Go to the top of the page
+Quote Post
NuLL
post 5.08.2005, 19:07:38
Post #14





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Cytat
@NuLL: zastanawiam sie nad tym Twoim componentManager'em i mam pyanie: co przemawia za tm zeby uzywac czegos takiego zamiast autoloadera ( taki mam pomysl aby autoloader zajmowal sie ladowaniem wszystkiego zarodno niejawinie jak i jawnie jak w wypadku componentManagera ).

Osobiście kocham porządek w aplikacji. Autoloader powoduje ogromny śmietnik w aplikacji wbrew pozorom. ComponentManager również wykorzystuje autoloader bo nie ma w nim żadnejgo includa czy czegokolwiek podobbnego. A napisany jest po to żeby był i tyle.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
ebe
post 5.08.2005, 20:05:03
Post #15





Grupa: Zarejestrowani
Postów: 150
Pomógł: 1
Dołączył: 23.01.2004

Ostrzeżenie: (0%)
-----


@NuLL czy kontekst tworzy i wypełnia (na podstwie GET'a i POST'a) kontroler i przekazuje do akcji? A potem ten sam obiekt context wykorzystuje widok?

Ten post edytował ebe 5.08.2005, 20:05:31


--------------------
Słyszałem, że macie tutaj jakieś takie php... fajne to, dobre to jest?
Go to the top of the page
+Quote Post
NuLL
post 5.08.2005, 21:29:21
Post #16





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Trochę tak i trochę nie. Podziału na widok i model nie ma, bo mi się nie podoba i jest niewygodne IMHO. Więc kontekst jest przekazywany tylko do samej akcji.

Co do kontekstu a mnie dane z pasku adresu są pobierane z klasy która parsuje adres a z tablicy $_GET.

EDIT: Ja osobiście uważam, że kontekst lepiej spełnia swoje zadanie aniżeli kilka osobnych klas.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
squid
post 5.08.2005, 21:32:40
Post #17





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 3.07.2003
Skąd: Szczecin->niebuszewo->*(next to window)

Ostrzeżenie: (0%)
-----


@ebe czemu chcesz uzyc kontekstu, nie lepiej klase requesta zrobic na singletonie i odwolywac sie z dowolnego mmiejsca w kodzie do parametrow?


--------------------
Jeśli życie to kara to nieźle nabroiłem ;-)
Go to the top of the page
+Quote Post
ebe
post 5.08.2005, 23:01:00
Post #18





Grupa: Zarejestrowani
Postów: 150
Pomógł: 1
Dołączył: 23.01.2004

Ostrzeżenie: (0%)
-----


Tzn. badam różne rozwiązania. Zobaczyłem kawałek kodu NuLL'a i rozbudziło to moją ciekawość. W tej chwili mam, że w akcji biorę instancję requesta, ale chcę wiedzieć jak rozwiązał to NuLL za pomocą wzroca Context.


--------------------
Słyszałem, że macie tutaj jakieś takie php... fajne to, dobre to jest?
Go to the top of the page
+Quote Post
NuLL
post 5.08.2005, 23:14:26
Post #19





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


To jest taki wzorzec ? UU winksmiley.jpg - nie wiedziałem - dla mnie inspiracją był phiend2. Nie wiem co tam powiada wzorzec o tym. Ale u mnie składa się on z POST, danych z URL-a oraz ciastek - nic więcej. U mnie np. sesja nie należy do kontekstu, jest singletonem. Tak samo zmienne serwerowe smile.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
ebe
post 5.08.2005, 23:19:17
Post #20





Grupa: Zarejestrowani
Postów: 150
Pomógł: 1
Dołączył: 23.01.2004

Ostrzeżenie: (0%)
-----


Z założenia context to taki wewnętrzny 'protokół' komunikacji między obiektami, ja go wykorzystuję w komunikacji akcja-widok, dzięki czemu nie assignuję niczego. Dlatego zastanawiałem się jak tego użyłeś.

PS gdzie można dorwać najnowszego phienda2, z tego co widać coś się ruszyło i może jest już coś nowego?


--------------------
Słyszałem, że macie tutaj jakieś takie php... fajne to, dobre to jest?
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:24