Мне преподавали Анализу и проектированию OO посредством Применения Craig Larman UML и Шаблонов: Введение в Объектно-ориентированный Анализ и проектирование и Итерационную разработку, которая следует (Объединенный Процесс).
При использовании его мы обычно тянем a Domain Model
и от него, делая Схемы Взаимодействия/Ассоциации, мы добираемся до Class Diagrams
. Мы обычно затем делаем Controllers
это будет "логическим элементом" между нашим Model
и "внешний мир" (после шаблонов СХВАТЫВАНИЯ). Все глобальные доступы, чтобы сделать любой вид логики должны пройти Controllers
. Я назову их Controllers
Model's Controllers
, таким образом, позже, когда мы говорим о MVC's Controllers
мы можем дифференцировать их. Это может быть изображено в следующей самой потрясающей схеме:
сопроводительный текст http://dl.dropbox.com/u/6187267/pic1.jpg
В черном цвете у нас есть наш Model
объекты и это классы' ассоциации. В красном мы имеем Model Controllers
, те данные использования из Model
.
В основном, после этого вида дизайна, можно только работать с Model
через так называемое Model's Controllers
(у нас обычно был тот Controller
на Use Case
!).
При приобретении знаний о MVC у меня всегда был вопрос везде, где MVC's Controller
был на самом деле Model's Controller
или нет? Действительно ли они - то же понятие или нет? Я думаю, что они - различные понятия, как Model Controllers
мы раньше делали, ни о чем никогда не знал кроме классов на нашем Model
, который не является тем, что, кажется, происходит в MVC's Controllers
.
Если то, что я говорю, верно, следующая схема должна иметь смысл:
сопроводительный текст http://dl.dropbox.com/u/6187267/mvc_.png
Я прав?
Кажется, я понимаю, о чем вы говорите :)
То, что вы называете контроллерами модели
, известно как репозитории. Это интерфейс, который определяет ваши конкретные взаимодействия с базовой моделью. Например, если у вас есть класс, представляющий Employees, и вы хотите сделать три вещи:
List List()
Add(int employeeID)
Delete(int employeeID)
Тогда вы бы определили интерфейс, называемый примерно так:
public interface IEmployeeRepository
{
List<Employee> List();
void Add(int employeeID);
void Delete(int employeeID);
}
Вы бы убедились, что весь ваш код работает с интерфейсом, а не с объектом напрямую - паттерн репозитория. Это то, что вы называете моделью контроллера
. Более подробную информацию смотрите на http://www.dev102.com/2008/12/08/working-with-aspnet-mvc-part-2-the-model-and-the-repository-pattern/, или поищите на Repository Pattern.
Контроллер в мире MVC - это фактически то, что диктует логику программного потока. Например, у вас есть представление списка сотрудников. Когда пользователь нажимает кнопку "Delete" на этом представлении, контроллер загружает соответствующее хранилище и вызывает на нем метод Delete.
tl;dr: MVC Controller = Когда пользователь делает это, сделайте это в программе (логика программы); Repository (Model Controllers) = Определите, какие взаимодействия поддерживаются с объектами в моей модели
И да, вы правы :)