Я стараюсь придерживаться лучших многоуровневых методов проектирования и не хочу, чтобы мой MVC-контроллер взаимодействовал с моим DAL (или любым IRepository, если на то пошло). Он должен пройти через уровень моего бизнес-сервиса для обеспечения правильных бизнес-правил и проверки. Проверка. Я не хочу выполнять проверку в контроллере с использованием различных атрибутов проверки (таких как [Обязательный]) на объектах модели домена, потому что это проливает свет на мой интерфейс. Не говоря уже о том, что эта услуга также может быть реализована через интерфейс WPF.
Поскольку моя проверка выполняется на моем уровне обслуживания, каковы наилучшие методы возврата значений в пользовательский интерфейс? Я не хочу "void addWhatever (int somethingsID)", потому что мне нужно знать, не получилось ли это. Должно ли это быть логическим? Должно ли это быть Enum? Должен ли я использовать обработку исключений? Или мне нужно вернуть некоторый объект IValidationDictionary, аналогичный тому, который использовался MVC при атрибуции атрибутов проверки для объектов модели? (что я мог бы использовать шаблон адаптера в пользовательском интерфейсе позже, если это необходимо)
Я хотел бы передать свою сущность из контроллера на уровень сервиса и понять, не сработало ли подтверждение/сохранение данных. Я также не хочу упускать из виду тот факт, что мне нужно вернуть представление, указывающее правильные сообщения об ошибках для каждого поля, которое может не получило проверки (я хотел бы сохранить это как можно более безболезненным).
У меня было несколько идей, все из которых не чувствуют себя хорошо. Я считаю, что ответ включает в себя объекты View-specific-model, но это приводит к проблеме целого картографирования, с которой нужно иметь дело, не говоря уже об этом, нарушает принцип DRY (не повторяйте сам). Какая практика?