ASP.NET MVC - логика проверки - где разместить? - PullRequest
2 голосов
/ 18 декабря 2010

Я пытаюсь определить, где разместить мои "Модели валидации".

Моя структура на данный момент:

Веб (ссылка на Бизнес и объекты)

  • Контроллеры

  • Просмотры

  • CSS

  • Сценарии

Бизнес (ссылка на данные и объекты)

  • Услуга

Данные (имеют ссылку на объекты)

  • Репозитории и контекст EF (сначала код)

Предметы

  • POCO (для EF)

Теперь мой вопрос, где разместить валидационные вещи, такие как модель входа в систему? Нужно ли размещать модель в моем веб-слое или слое объектов? - или я должен даже хранить такие модели проверки?

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 18 декабря 2010

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

Итак:

Веб

  • Контроллеры
  • Представления
  • Модели (здесь вы можете разместить свои модели просмотра)
  • CSS
  • Скрипты
0 голосов
/ 18 декабря 2010

Все, что должно быть проверено, должно быть на вашем бизнес-уровне. Валидация - это бизнес-задача, которая не должна разбросаться по слоям и не должна быть привязана к конкретному типу приложения (веб, окна, сервис и т. Д.).

Если вы предоставляете свою модель домена приложению, вы также можете украсить свои сущности атрибутами проверки, но учтите, что если ваша модель домена изменится, то ваше приложение сломается.

Допустим, у вас есть класс AccountService на бизнес-уровне, который имеет метод Login. Login принимает класс LoginInput и возвращает класс LoginResult:

public class LoginInput {

   [Required]
   public string Username { get; set; }

   [Required]
   public string Password { get; set; }
} 

public class LoginResult {
   public bool Success { get; internal set; }
   public string Error { get; internal set; }
}

Оба эти класса могут использоваться в качестве ViewModel, поэтому вам не нужно создавать какие-либо ViewModel на веб-уровне, и вам определенно не следует помещать в них логику проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...