Итак, я новичок в MVC и прочитал о нескольких десятках подобных вопросов о SO и некоторых блогах. Я не могу понять, как структурировать мое приложение. Либо я не получаю, либо люди, похоже, имеют разные мнения о том, как это сделать. Итак, вот мой конкретный, простой пример: экран входа в систему и экран создания учетной записи.Структура приложения MVC
Из моего понимания я должен иметь следующее:
зрения Простой в этом случае два вида
модели Две вид модели. Логин имеет имя пользователя и пароль. Регистрация имеет имя пользователя, пароль, адрес электронной почты и т. Д. Только свойства не имеют методов.
контроллер Строит вид модель с помощью вызова службы слоя как CreateUser()
бизнеса/услуги отдельного проекта. Имеет методы взаимодействия с базой данных и применения бизнес-логики. Вызывается контроллером, который массирует вывод в формат модели просмотра. Этот проект имеет свои собственные модели/классы, не привязанные к определенному виду. CreateUser() в этом слое вызовет хранимую процедуру на db
Это правильный поток? А также при возврате данных с бизнес-уровня я не должен использовать модели представления. Итак, я создаю другой набор моделей на стороне бизнеса, которые напоминают логические сущности в db?
Итак, у меня есть несколько страниц, на которых я возвращаю данные пользователя. В некоторых это может быть просто имя пользователя, дата последнего входа и их идентификатор пользователя. В других он может быть более подробным, как полный профиль. Каким должен быть выход с уровня сервиса? Должен ли он всегда быть всеохватывающим классом. Если я начну создавать конкретные классы вывода конкретного случая, то не я, по сути, дублирую модели просмотра? – ElPresidente
Я бы добавил только модели просмотра, где это имеет смысл и добавляет ценность. В некоторых случаях может работать привязка объекта модели непосредственно к представлению. Вопрос о том, что возвращает сервис, подходит для обсуждения. Некоторые предпочитают очень гранулированные услуги (микросервисы), но другие предпочитают более общие услуги. – TGH
Таким образом, я мог бы иметь еще один проект, содержащий модели домена, такие как SiteUser и расширенный SiteUserProfile, который наследуется от первого. Мои методы обслуживания могут возвращаться либо в зависимости от функции контроллера? Что меня заводит, я говорю, что у меня есть поле, такое как LastActivityDate. Некоторым экранам это нужно, некоторые нет. Если я создам общую службу, похоже, что моя модель SiteUser, возвращаемая службой, будет содержать это поле, независимо от того, используется ли этот конкретный контроллер? – ElPresidente