Ваш подход, вероятно, должен быть таким, когда контроллеры представлений и модели настолько невежественны, насколько это возможно. Я считаю, что это довольно распространенный шаблон дизайна. У вас должны быть объекты модели, которые представляют каждый логический «объект» в вашем домене. Эти объекты могут быть просто государственными. Затем вы можете захотеть создать контроллер (как вы упомянули), который имеет доступ к вашей базе данных и может выполнять запросы. Результат этих запросов должен использоваться для создания экземпляров объектов вашей логической модели (например, XXPerson) и передачи их любому, кто сделал запрос. Учитывая это, каждый контроллер представления в вашем приложении должен делать следующее:
- Создайте свои виды и выложите их соответствующим образом
- Создание объекта контроллера базы данных (и, возможно, удержание его для дальнейшего использования)
- Запросите в базе данных необходимые данные через объект контроллера базы данных
- Используйте полученные данные (которые должны быть возвращены как объекты логической модели), чтобы скорректировать представления или сделать с ними все, что вам нужно
Обратите внимание, что вы могли бы использовать синглтон для своего контроллера базы данных, но шаблон синглтона является отвратительным, если вы спросите большинства хороших разработчиков. :) Вместо этого, на самом деле нет причины, по которой ваше приложение не может просто создать экземпляр контроллера вашей базы данных по мере необходимости, использовать его для некоторых запросов, а затем отбросить его.
Внутренне, конечно, ваш класс контроллера базы данных должен иметь единичный статический доступ к базе данных и, возможно, синхронизировать доступ к методам записи, чтобы избежать проблем с параллелизмом.
Существует много возможных подходов к проектированию, но тот, в котором вещи слабо связаны, означает, что не происходит никакой взаимозависимости, что всегда хорошо. Пусть ваши объекты модели, объекты контроллера базы данных и представления будут независимы друг от друга. Конечно, контроллеры представлений - это мосты, которые связывают все эти независимые концепции в функциональный продукт.
Во всяком случае, это мое мнение. :)