MVC
Ох блин. Я уже и забыл что это такое.
Мне не нравится как это сделано во многих фреймворках. Они предлагают следовать четкой структуре не давая никакой свободы. Т.е. контроллеры обязательно должны быть в одном месте и только в одном. Тоже самое с моделями и вьюхами. А разруливание зависимостей осуществляется через один глобальный обьект. Я считаю, что так дела не делаются. Каждый обьект должен явно зависеть только от тех обьектов, которые действительно необходимы. А если еще и используются интерфейсы, то в итоге получаем невероятно гибкую систему. А что уже там чем является моделью контроллером или службой не важно, главное, что мы знаем какой обьект за что отвечает и что ему нужно знать самому, чтобы он мог работать. Когда я пейсал себе движок, то я старался следовать именно этому принципу.
И в итоге если нам на каком то этапе понадобилась какая то фича, в данном случае кэширование, то можно будет написать проксирующий класс, и внедрить его не затрагивая уже написанную логику приложения. ну я надеюсь вы меня поняли .Гг.