Не могу понять контроллерную часть MVC - PullRequest
0 голосов
/ 29 марта 2019

Что это за контроллеры? Нас попросили построить банкомат на Java для школьного проекта, и часть нашего дизайна:

  1. У нас есть аккаунты, в которых хранится большая часть информации
  2. У нас есть пользователи, которые могут выполнять операции для своих учетных записей и хранить некоторую незначительную информацию. (Также у нас есть класс atm для хранения пользователей и внесения изменений на более высокий уровень)
  3. У нас есть userInterface для захвата входов и использования контроллеров.

Прав ли я, что наши учетные записи - это модели, интерфейсы - представления, а пользователи - контроллеры?

Большое спасибо за решение моей проблемы!

Ответы [ 3 ]

3 голосов
/ 30 марта 2019

Вы говорите: "счета - это модели" .На самом деле нет, они не являются.

A модель домена (также называемая модель слоя , или модель ) не является одним компонентом, нослой, состоящий из нескольких компонентов.Он абстрагирует реальный процесс и необходимые ресурсы.Другими словами, он моделирует бизнес-логику (представленную данными и особенно поведением).

Уровень модели может быть частью приложения или может использоваться несколькими приложениями.

Каждый из компонентов модели играет определенную роль.Это может быть сущность (например, объект домена ), объект значения , служба , преобразователь данных абстракция, хранилище абстракция, абстракция внешнего сервиса (например, электронной почты или платного сервиса) и т. Д. Под абстракциями я подразумеваю интерфейсы или абстрактные классы.Конкретные реализации не должны быть частью модели предметной области, а должны иметь другое внешнее пространство по сравнению с моделью, служащей инфраструктурными конструкциями.

Итак, ваши User, Account и Atm классы являются просто компонентами модели.Точнее, это сущности .

С другой стороны, контроллеры и представления являются компонентами уровня UI.

контроллеры (должны) взять на себя ответственность только откладывая (например, отправляя) выполнение пользовательского запроса на уровне модели .Точнее, к уровню обслуживания , который определен как пограничный уровень модели домена и представлен его компонентами обслуживания .Таким образом, определенный экземпляр службы внедряется в контроллер как зависимость.Контроллер передает ему текущий пользовательский ввод (данные) и вызывает его определенный метод, в котором определены необходимые этапы обработки пользовательских запросов.Экземпляр службы вместе с другими объектами уровня модели выполняет все эти шаги, чтобы обновить модель с помощью пользовательского ввода .Поэтому, имея в виду задачу диспетчеризации, метод контроллера должен быть небольшим и содержать 1-3 строки кода.

Представления (должны) получать (обновленные) данные из модели предметной области - , запрашивая их (например, извлекая из них данные) - и отображая их,Аналогично контроллерам, представления взаимодействуют с моделью через определенные сервисные компоненты.

Я использовал глагол «должен» , чтобы подчеркнуть тот факт, что существуют разные модели реализациислой пользовательского интерфейса.Реализация может использовать контроллеры и представления, как описано выше - оригинальный дизайн MVC.Другая реализация будет использовать контроллеры не только для обновления модели (через сервисы), но также для запроса ее (через сервисы), чтобы передать полученные данные в представление для отображения пользователю.Или реализация может даже не использовать сервисы вообще, что заставляет этапы обработки запроса пользователя быть определенными в контроллерах и / или представлениях.И так далее.Итак, вам решать, как вы решите реализовать слой UI .

Обратите внимание, что вы также можете иметь контроллеры и / или представления, названные как компоненты модели (User, Account, Atm и т. Д.).Но тогда вы должны использовать пространства имен , чтобы различать их все - рекомендуемый путь.В Java пространства имен управляются пакетами.

Некоторые ресурсы с более подробной информацией (в основном связанные с веб-MVC, с примерами на PHP):

0 голосов
/ 31 марта 2019

Вы не совсем правильно поняли, но не волнуйтесь - на самом деле несложно выяснить, какие есть детали, когда вы знаете, почему они существуют.

Вот оно:

  • MODEL : MVC - это архитектурный шаблон для разделения задач в приложениях с пользовательскими интерфейсами.Модель - это просто часть приложения, которая не связана с пользовательским интерфейсом.В нем вообще нет кода, который зависит от пользовательского интерфейса, конкретных операций, которые предоставляет пользовательский интерфейс.Вместе вид и контроллер определяют пользовательский интерфейс, а модель - это просто , все остальное , хотя, когда мы говорим об этом в контексте приложения MVC, мы обычно просто ссылаемся на все остальное, что может видеть пользовательский интерфейс илиаффекта.Иногда это приводит нас к созданию в приложении объекта, который называется моделью, но это на самом деле не требуется и часто бесполезно.

Важно понимать, что стрелки на тех диаграммах MVC, которые идутпо кругу показывают поток данных .Когда вы рисуете диаграмму, которая показывает зависимость , представление и контроллер зависят от модели.Модель не зависит от вида.

Теперь, когда мы определили модель как " модель не является пользовательским интерфейсом ", очевидно, что пользовательский интерфейс состоит из вида иконтроллер.

Мы разделяем их и помещаем пользователя между ними:

  • VIEW : это часть пользовательского интерфейса, которая представляет информацию до пользователя.Он определяет, что пользователь увидит, услышит и т. Д. Он берет информацию из модели и предоставляет информацию пользователю.

  • КОНТРОЛЛЕР : Это частьпользовательский интерфейс, который получает информацию от пользователя и реализует действия, которые он хочет выполнить.

Канонический пример состоит в том, что представление создает кнопкуи контроллер обрабатывает щелчок .Разделение между представлением и контроллером, с пользователем (и временем) между ними, и есть цель MVC.Они не подключаются в программном обеспечении, кроме как через модель.

Фундаментальное допущение MVC заключается в следующем: Мы можем отделить код представления от кода контроллера, поскольку они выполняются в разное время .Код представления запускается после изменения модели, прежде чем пользователь сможет воздействовать на эти изменения, и код контроллера запускается после того, как пользователь решает действовать.

Также важно понимать, что это никогда не бывает абсолютно точным.MVC - это упрощение, и между кодом контроллера и кодом представления всегда есть связи, которые не проходят через модель.Но мы стараемся.Большая часть работ по проектированию в инфраструктурах или приложениях MVC - это попытка управлять и правильно спроектировать способы, которыми они обманывают.

0 голосов
/ 29 марта 2019

Контроллеры в этом контексте будут получать запрос пользователя через интерфейсы и вызывать сервис для выполнения каких-либо действий, вызывать уровень базы данных для извлечения данных и заполнения моделей, интегрировать модель с представлением для создания желаемого представления и возвращать объединенное представление пользователю. Пользователь и учетная запись будут разными, но связанными сущностями, которые будут представлены в базе данных.

...