Описание
Мое решение имеет следующие проекты:
- DAL= Измененная структура сущностей
- DTO= объекты передачи данных, которые могут проверять себя
- BL= службы бизнес-уровня
- WEB= презентация Приложение ASP.NET MVC
DAL, BL и WEB все ссылки DTO, которые великолепны.
Процесс обычно выполняется следующим образом:
- Веб-запрос делается на WEB
- WEB получает сообщения DTO
- DTO получают автоматическую проверку через пользовательский ActionFilter
- ошибки проверки автоматически собираются
- (валидация в порядке) WEB-вызовы в BL, предоставляющие DTO
- BL вызывает DAL с помощью DTO (может либо передать их, либо просто использовать)
Проблема проверки DTO, затем...
Мои DTO могут проверять себя на основе собственного состояния (значения свойств). Но сейчас я сталкиваюсь с проблемой, когда это не так. Мне нужно, чтобы они проверяли использование BL (и, следовательно, DAL).
Мой пример в реальной жизни: пользовательские регистры и WEB получают Пользовательский DTO, который проверяется. Проблематичной частью является проверка username
. Его уникальность следует проверить против хранилища данных.
Как я должен это делать?
Имеется дополнительная информация о том, что все DTO реализуют интерфейс (т.е. User
DTO реализует IUser
) для целей IoC и TDD. Оба являются частью проекта DTO.
Невозможные попытки
- Я не могу ссылаться на BL в DTO, потому что получаю круговую ссылку.
Compilation error
- Я не могу создать дополнительный проект DTO.Val, который будет ссылаться на частичные классы DTO и выполнять их проверку там (они будут ссылаться на BL + DTO).
Partial classes can't span assemblies.
Возможные попытки
- Создайте специальный
ActionFilter
, который будет проверять объект на внешние условия. Это будет создано в рамках WEB-проекта, таким образом, DTO и BL, которые будут использоваться здесь. - Поместите DTO в BL и сохраните интерфейсы DTO в качестве реальных DTO, на которые ссылаются другие проекты, и реорганизуйте весь код для использования интерфейсов вместо конкретных классов.
- Не обрабатывайте внешнюю зависимую проверку и пусть внешние зависимости вызывают исключение - возможно, худшее решение этой проблемы