Radosław
Zatoka
CTO / Symfony 2
developer
Temat: współdzielenie kodu akcji (kontrolerów) pomiędzy sf apps
Jakie macie pomysły na współdzielenie kodu akcji (kontrolerów) pomiędzy aplikacjami?Mamy np. klasę akcji do pobierania plików (download).
Są tam metody do wyświetlania listy plików, wysłania pliku strumieniem itp.
Metody oczywiście są krótkie, bo odwołują się wyłącznie do modelu,
jednak mając frontend i backend i chcąc udostępnić funkcjonalności po obu stronach,
jesteśmy zmuszeni skopiować katalog z modułem download do obu aplikacji
(kod jest identyczny, potrzebuję po prostu mieć możliwość wywołania zarówno frontend.php/download, jak i backend.php/download).
Jest to oczywiście b brzydkie rozwiązanie, bo duplikujemy kod (złamane DRY ;)) i narażamy się na zmiany w dwóch miejscach jednocześnie.
To, co sobie wymyśliłem na szybko, to wydzielenie osobnej klasy w lib i zebranie w niej wspólnych metod akcji.
Metody z kontrolerów pozostają, jednak delegują wywołania do nowoutworzonej klasy. Eliminujemy duplikację kodu funkcjonalnego.
Rozwiązanie to jednak nie do końca mi się podoba:
1) jesteśmy zmuszeni przekazywać ciągle kilka parametrów (zwykle minimum to sfWebRequest i sfUser)
2) łamiemy architekturę, bo tak naprawdę tworzymy kontroler w lib...
Czy ktoś z Was ma na to jakiś sprytniejszy sposób i chciałby się podzielić ? :)
Tak teraz podczas pisania przyszło mi na myśl,
chyba lepszym rozwiązaniem jest zmiana dziedziczenia z własnej metody akcji (zamiast sfActions) niż delegacja?