2014-10-10 3 views
0

Итак, я новичок в MVC и прочитал о нескольких десятках подобных вопросов о SO и некоторых блогах. Я не могу понять, как структурировать мое приложение. Либо я не получаю, либо люди, похоже, имеют разные мнения о том, как это сделать. Итак, вот мой конкретный, простой пример: экран входа в систему и экран создания учетной записи.Структура приложения MVC

Из моего понимания я должен иметь следующее:

зрения Простой в этом случае два вида

модели Две вид модели. Логин имеет имя пользователя и пароль. Регистрация имеет имя пользователя, пароль, адрес электронной почты и т. Д. Только свойства не имеют методов.

контроллер Строит вид модель с помощью вызова службы слоя как CreateUser()

бизнеса/услуги отдельного проекта. Имеет методы взаимодействия с базой данных и применения бизнес-логики. Вызывается контроллером, который массирует вывод в формат модели просмотра. Этот проект имеет свои собственные модели/классы, не привязанные к определенному виду. CreateUser() в этом слое вызовет хранимую процедуру на db

Это правильный поток? А также при возврате данных с бизнес-уровня я не должен использовать модели представления. Итак, я создаю другой набор моделей на стороне бизнеса, которые напоминают логические сущности в db?

ответ

2

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

Однако некоторые могут утверждать, что вы всегда должны создавать модели просмотра - даже те, которые отражают модель. Я также могу понять этот аргумент, поскольку он связан с тем, чтобы избежать взаимодействия между пользовательским интерфейсом и сервисом, что позволяет вам развивать сервис без изменения цепочки в пользовательском интерфейсе. Вы должны принять решение о том, насколько важно это для вас, поскольку это происходит за счет уровня, который «переправляет» значения между одинаковыми объектами.

+0

Итак, у меня есть несколько страниц, на которых я возвращаю данные пользователя. В некоторых это может быть просто имя пользователя, дата последнего входа и их идентификатор пользователя. В других он может быть более подробным, как полный профиль. Каким должен быть выход с уровня сервиса? Должен ли он всегда быть всеохватывающим классом. Если я начну создавать конкретные классы вывода конкретного случая, то не я, по сути, дублирую модели просмотра? – ElPresidente

+0

Я бы добавил только модели просмотра, где это имеет смысл и добавляет ценность. В некоторых случаях может работать привязка объекта модели непосредственно к представлению. Вопрос о том, что возвращает сервис, подходит для обсуждения. Некоторые предпочитают очень гранулированные услуги (микросервисы), но другие предпочитают более общие услуги. – TGH

+0

Таким образом, я мог бы иметь еще один проект, содержащий модели домена, такие как SiteUser и расширенный SiteUserProfile, который наследуется от первого. Мои методы обслуживания могут возвращаться либо в зависимости от функции контроллера? Что меня заводит, я говорю, что у меня есть поле, такое как LastActivityDate. Некоторым экранам это нужно, некоторые нет. Если я создам общую службу, похоже, что моя модель SiteUser, возвращаемая службой, будет содержать это поле, независимо от того, используется ли этот конкретный контроллер? – ElPresidente

Смежные вопросы