Witajcie,
Od kilku dni nurtuje mnie pewien pomysł na budowę aplikacji. Do tej pory wyglądało to u mnie tak, że do głównego kontrolera podczas jego tworzenia wrzucałem referencję do routera [w ktorym siedzial request, response (iterator przechowujacy odpowiedz z akcji przekazywana dalej do widoku - w celu unikniecia jawnego przekazywania widoku akcjom i odwrotnie), i url decoder], do klasy obslugi baz danych, do menadzera akcji, menadzera widoku, klasy config, etc, byly metody odpalajace poszczegolne etapy wykonywania i w sumie wychodziło dosyć topornie od strony elastycznosci. Ale mniejsza o to czy to podejscie bylo sluszne czy nie - co projekt to inna interpretacja MVC. Poniewaz moja aplikacja ma na podstawie jednego rzadania odpalac kilka akcji - wiadomo, mam strone glowna portalu wiec musi sie zaladowac ShowNews, ShowMenu, ShowCalendar, ShowArticles i tak dalej. Z tego powodu postanowilem zaimplementowac moj stary patent - TaskManager ktory na podstawie pojedynczego rzadania tworzy mi gotowy lancuch akcji i przekazuje dalej do ActionManagera. I tu pojawil sie dylemat - gdzie to wsadzic - czy jako nakladka na ActionManager, czy oddzielny czlon systemu, czy jako filtr requestu tlumaczacy zapytania. W miedzyczasie przeczytalem w Design Patterns opis wzorca Chain of Responsibility, dzieki czemu wpadlem na IMHO ciekawy pomysl. Otoz mysle, aby trzonem systemu byl wlasnie request a nie controller. Mam klase request, ktora - w przypadku aplikacji webowej - trzyma wszystko z superglobali, czyli to co przychodzi z przegladarki. Cala rola kontrolera w tym przypadku to przepuszczenie tego requesta przez lancuch swego rodzaju filtrow dzialajacych na tym requescie i pozniejsze przekazanie response'a do widoku. Mialbym zestaw klas-filtrow opartych o jednolity interfejs, takich jak url decoder czy task manager ktore na podstawie odpowiednich zapytan dodawaly by nowe zapytania do requestu, action manager ktory na bazie otrzymanego zapytania odpalal by akcje i wywalal odpowiedz juz nie do requestu a do responce, moze i cos, co na podstawie zapytania wypluwalo by mi odpowiedni widok czy chociaz jego nazwe...
Pomysl jest bardzo swieży i zastanawiam sie zarowno nad jego implementacja jak i ogolnym sensem takiego podejscia. Wlasciwie czesc opisanych rzeczy wymyslalem prawie ze na zywo podczas pisania postu wiec moglem napisac glupoty, wiec prosze o ewentualne wyprostowanie mojego toku myslenia. W tej chwili wydaje mi sie iz taka modularyzacja systemu oparta o wspolny interfejs nadala by mu elastycznosci, do tej pory nie spotkalem sie jeszcze z tego typu dynamiczna architektura wiec prosze Was o opinie. W praktyce mozna by sprowadzic konstrukcje frameworka do kontrolera lancucha, klasy z requestem, iteratora z responce i interfejsu dla filtrow. Wlasciwie to nawet klasa abstrakcji na bazy danych mogla by byc odpalana przez filtr dopiero jesli jest potrzebna, tak samo nawet i widok - jesli dana instancja ma tylko wyslac do przegladarki plik i doliczyc go do licznika pobran, to przeciez jasne ze nie ma tu miejsca na widok bo zadnego widoku taka aplikacja nie powinna wypluwac.
Nie daje na razie ani zadnego diagramu ani przykladow kodu tylko suchy opis, bo jeszcze nie do konca wiem jak by to mialo hulac wszystko i czy to ma sens.