Контроллеры СХВАТЫВАНИЯ и вопрос о Контроллерах MVC

Введение в проблему

Мне преподавали Анализу и проектированию 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

Я прав?

7
задан devoured elysium 23 July 2010 в 07:19
поделиться

1 ответ

Кажется, я понимаю, о чем вы говорите :)

То, что вы называете контроллерами модели, известно как репозитории. Это интерфейс, который определяет ваши конкретные взаимодействия с базовой моделью. Например, если у вас есть класс, представляющий 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) = Определите, какие взаимодействия поддерживаются с объектами в моей модели

И да, вы правы :)

4
ответ дан 7 December 2019 в 14:28
поделиться