Как лучше, чтобы сервисный уровень проверял входные данные?

Я строю сайт MVC, используя TDD.

Я начал с создания хранилища и сервисных слоев для обработки CRUD-операций моих классов POCO.

Я еще не написал никакого кода контроллера, и я думал, что страницы будут просто публиковать значения форм и т. Д. В контроллер, который будет передавать их прямо на сервисный уровень без преобразования в тип.

например

var content = ContentSevice.CreateContent(name: ValidContentName, contentTypeId: ValidContentTypeId, languageId: ValidLanguageId, author: ValidAuthor);

У меня также есть служба администратора, которая создает языки, типы контента и другие объекты.

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

Поэтому, чтобы сохранить повторяющийся код, я извлекаю методы для проверки общих частей. Это просто означает, что теперь у меня есть ValidateLanguageName, ValidatePropertyTypeName и т. Д.

Так что это пахнет.

Каков наилучший способ проверки этих входных данных для объектов? Я думал о каком-то другом сервисе или классе для каждого объекта, например LanguageValidator?

Несмотря на то, что параметры будут использовать проверку на стороне клиента и в контроллере, я хочу проверить их на уровне обслуживания, так как именно так получился код с точки зрения TDD, и я не думаю, что методы контроллера должны знать типы.

1 ответ

Решение

Проверка правильности является сквозной задачей, и ее можно вызывать во всем коде и слоях, должно быть одно место для ее размещения и вызова, а в простых случаях это может быть сам объект.

Итак, первый совет: отправьте сервису объект, а не набор аргументов, а затем поместите логику проверки в объект внутри метода с именами IsValid(), например, и проверьте там правила и отправьте обратно список сообщений или словарь для каждого объекта. имя и сообщение об ошибке.

Другие вопросы по тегам