W MVC staram się, aby mój kontroler był tak „cienki”, jak to możliwe, a moje modele były tak głupie, jak to możliwe.
Potrzebne funkcje logiczne i pomocnicze zostają umieszczone w osobnych, niezależnych klasach pomocniczych. To sprawia, że moje testowanie jest również znacznie łatwiejsze (testujesz ... prawda?: D) Testowanie kontrolerów jest niezwykle trudne, za każdym razem, gdy próbujesz utworzyć instancję kontrolera do przetestowania, musisz pomyśleć o kontekście HTTP i fałszowaniu http to i tamto, i to jest ból, ale celowo jest to ból. Potrzebujesz tych wszystkich rzeczy, ponieważ kontroler jest tak ściśle powiązany z HTTP i Internetem. Jest to punkt wejścia do Twojej aplikacji internetowej.
Funkcje logiczne i pomocnicze nie mają nic wspólnego z siecią. Są całkowicie agnostyczne dla środowiska (a przynajmniej powinny). To samo powinno ci powiedzieć, że nie należą do siebie w tym samym miejscu. Ponadto, jeśli wszystkie logiki aplikacji są ściśle powiązane z Internetem lub konkretną implementacją sieci, nigdy nie można zabrać go ze sobą.
Opracowaliśmy naszą witrynę MVC ze wszystkimi naszymi jednostkami bazy danych (nie naszymi modelami mvc, naszymi rzeczywistymi jednostkami db), naszą pamięcią, naszymi klasami pomocniczymi i naszą logiką w oddzielnych niezależnych bibliotekach DLL. Każdy z nas miał tylko jedną stronę internetową, ale i tak to zrobiliśmy.
Kilka miesięcy temu zostaliśmy poproszeni o utworzenie kilku aplikacji komputerowych, które są powiązane z kilkoma naszymi systemami dodatkowymi. Zrobiono to łatwo, ponieważ cały nasz przetestowany kod można łatwo ponownie wykorzystać. Gdybyśmy umieścili nasz kod w naszym projekcie internetowym lub w naszych kontrolerach, nigdy nie bylibyśmy w stanie tego zrobić.