Это проект MVC 3, использующий архитектуру S # arp.
В моем домене есть несколько объектов, которые наследуют NamedEntity
, который является абстрактным классом, расширяющим Entity
и определяющим свойство string Name
.
Все эти объекты разделяют тот факт, что они должны быть уникальными именами по своему типу объекта.
Учитывая, что наборы этих объектов будут относительно небольшими (200 будет крайним случаем), я полагаю,не возражайте против поездки в базу данных, чтобы проверить, есть ли дубликат.
Мой вопрос: Каков наилучший способ легко проверить это, сохраняя при этом DRY?
Я прошел полдюжины итераций, не особо любя ни одну из них.Я попытался создать атрибут [ValidUniqueName]
в ViewModel, и ViewModel можно набрать EditViewModel<T> where T: NamedEntity
.Проблема заключается в том, что атрибут не знает правильный объект хранилища / задач, с которым нужно общаться из-за Generic.
Чтобы обойти это, я попытался создать ссылку INamedEntityTasks<T>
во ViewModel и получить к ней доступ из ValidationContext
для атрибута ValidUniqueName
.Это не работает, как ожидалось, потому что Атрибут не является общим (это не может быть), и поэтому он не знает, как правильно преобразовать ValidationContext.ObjectInstance
обратно во что-то пригодное для использования.
На этомТочка, единственное, что я могу придумать, это создать отдельные атрибуты [ValidUniqueFoo]
[ValidUniqueBar]
и т. д., что кажется плохим.В качестве альтернативы, я могу поставить проверку в каждом контроллере, но это одинаково плохо, кажется.