ASP.NET MVC Где разместить пользовательские атрибуты проверки - PullRequest
2 голосов
/ 08 июня 2011

Я возился с некоторыми структурами решений ASP.NET MVC3 и остановился на дизайне, который состоит из следующих проектов:

MyApp.Web -  MVC3 Web Layer
MyApp.Data - Repositories and infrastructure for managing data
MyApp.Domain - POCO Entities
MyApp.Service - Service layer through with I manipulate the model
MyApp.Test - doh

Где бы вы разместили свои собственные классы атрибутов проверки? Насколько я понимаю, они должны идти в проекте Domain, потому что они специфичны для классов сущностей, которые там живут, но тогда мне нужно будет сослаться на несколько библиотек, таких как System.Web.MVC, и я бы хотел сохранил ссылки в этом проекте до минимума. Мысли? * * 1004

Обновление:

Я удалил все атрибуты из своего проекта домена и создал модели представления, чтобы обернуть их в веб-проекте. Поместил все мои собственные классы проверки в папку в веб-проекте. Спасибо, ребята

Ответы [ 4 ]

3 голосов
/ 08 июня 2011

Я бы создал эти атрибуты в веб-проекте и добавил бы их к модели представления вместо сущности.

2 голосов
/ 08 июня 2011

Вам не нужно ссылаться на веб-библиотеки.Только System.ComponentModel.DataAnnotations

Поместите атрибуты проверки туда, где они используются. D

Обновление

Почему бы и нет?Почти каждый пример, который я видел, использует POCO в представлениях.Какая альтернатива?Создание каких-то классов-обёрток для моих POCO?

Из-за:

Безопасность

Допустим, вы получили POCO пользователя с полем IsAdmin.Используя POCO, ModelBinder в MVC установит это свойство, если оно выставлено «хакером», который, следовательно, получит доступ администратора.

Изоляция

Использование POCO вваш взгляд делает ваш вид косвенно зависимым от вашей базы данных.Конечно, POCO должны устранить эту зависимость.Но на самом деле они редко делают.

Настройка

Вы редко показываете все значения в виде, поскольку они хранятся в БД.

Код для адаптации модели должен быть не в виде, а в модели представления.Используйте в своих взглядах как можно меньше логики.

0 голосов
/ 15 июня 2011

Я бы следовал вашему первоначальному намерению добавить атрибуты к объектам домена

0 голосов
/ 08 июня 2011

Я бы имел атрибуты DataAnnotation в вашем веб-проекте, желательно в папке Common.Attributes.Я думаю, что jgauffin достиг (и я согласен), что ваши CustomAttributes должны действительно украшать ViewModels vs Entities в вашем проекте Domain.

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