Я пытаюсь выяснить, как определить правила проверки для моих доменных объектов в одном месте в моем приложении, но наткнулся на препятствие ...
Некоторые предыстории: мое приложение состоит из нескольких частей:
- База данных
- DAL
- Уровень бизнес-логики
- SOAP API Layer
- Сайт MVC
Веб-сайт MVC обращается к базе данных через SOAP API, как это делают третьи стороны. Мы используем проверку на стороне сервера и на стороне клиента на веб-сайте MVC, а также на уровне API SOAP.
Чтобы избежать необходимости вручную писать проверку на стороне клиента, мы реализуем строго типизированные представления вместе с помощниками Html.TextBoxFor и Html.ValidationMessageFor HTML, как показано на шаге 3 здесь . Мы также создаем пользовательские модели для каждой формы, где одна форма принимает данные для нескольких доменных объектов.
Именно здесь начинается проблема, HTML-помощники читают из модели атрибуты проверки аннотации данных. В большинстве случаев наши формы работают с несколькими объектами домена, и вы не можете указать более одного типа на странице <% @ Page ... Inherits = "System.Web.Mvc.ViewPage <MvcApplication.Models.SomeModel>"%> директивы. Поэтому мы вынуждены создать собственный класс модели, что будет означать дублирование атрибутов проверки из объектов домена в классе модели.
Я потратил довольно много времени на поиски обходных путей, например, ссылаясь на один и тот же MetadataType из класса домена и пользовательских моделей MVC, но это не сработает по нескольким причинам:
Вы можете указать только один атрибут MetadataType для каждого класса, поэтому возникает проблема, если модель ссылается на несколько объектов домена, каждый из которых имеет собственный тип метаданных.
Код проверки аннотации данных выдает исключение, если класс модели не содержит свойства, указанного в указанном MetadataType, который является проблемой с моделью, имеет дело только с подмножеством свойств для данного домена. объект.
Я смотрел и на другие решения, но безрезультатно. Если у кого-то есть какие-либо идеи о том, как создать единый источник логики проверки, который бы работал на клиентских и серверных функциях проверки MVC и других местах (таких как мой SOAP API), я бы хотел это услышать!
Заранее спасибо,
Мэтью