Głowię się już od pewnego czasu nad problemem modułowości aplikacji. Najlepiej będzie to wyjaśnić na przykładzie.
W aplikacji znajdują się dwa moduły - blog oraz rss. Jak wiadomo rss musi być stworzony na podstawie jakichś danych, więc sam moduł jest bezwartościowy. Jednak w przypadku bloga, może on istnieć bez rss.
I tutaj pojawia się problem.
Jeśli napiszę aplikację typu blog, która ma dostęp do rss, wówczas formularz do edycji wpisów musi w jakiś sposób uwzględniać istnienie rss (czy dodać do rss oraz do jakiego kanału dodać wpis). Jednak w przypadku aplikacji bez rss, formularz do edycji wpisów nie potrzebuje dodatkowych pól. Jak to rozwiązać?
Jedyny sensowny pomysł na jaki wpadłem jest taki, że w pliku z konfiguracją aplikacji mam zapisane jakie moduły są aktywne i na tej podstawie generuję (lub nie) odpowiednie elementy formularza oraz ich obsługę.
Rozwiązanie to ma jednak jedną poważną wadę. W przypadku dużej ilości zależnych od siebie modułów, powstanie mi kod spaghetti, w którym więcej jest if-ów niż kodu właściwego. Tyczy się to zarówno formularzy, jak i modeli.
Od razu napiszę, że odpada rozwiązanie, w którym to w module rss wybieram jakie wpisy mają zostać dodane do kanałów rss.