Как лучше, чтобы сервисный уровень проверял входные данные?
Я строю сайт MVC, используя TDD.
Я начал с создания хранилища и сервисных слоев для обработки CRUD-операций моих классов POCO.
Я еще не написал никакого кода контроллера, и я думал, что страницы будут просто публиковать значения форм и т. Д. В контроллер, который будет передавать их прямо на сервисный уровень без преобразования в тип.
например
var content = ContentSevice.CreateContent(name: ValidContentName, contentTypeId: ValidContentTypeId, languageId: ValidLanguageId, author: ValidAuthor);
У меня также есть служба администратора, которая создает языки, типы контента и другие объекты.
При проверке входных данных для этих методов многие из них дублируются между методами создания и редактирования для этого объекта. Некоторые параметры уникальны, хотя и.
Поэтому, чтобы сохранить повторяющийся код, я извлекаю методы для проверки общих частей. Это просто означает, что теперь у меня есть ValidateLanguageName, ValidatePropertyTypeName и т. Д.
Так что это пахнет.
Каков наилучший способ проверки этих входных данных для объектов? Я думал о каком-то другом сервисе или классе для каждого объекта, например LanguageValidator?
Несмотря на то, что параметры будут использовать проверку на стороне клиента и в контроллере, я хочу проверить их на уровне обслуживания, так как именно так получился код с точки зрения TDD, и я не думаю, что методы контроллера должны знать типы.
1 ответ
Проверка правильности является сквозной задачей, и ее можно вызывать во всем коде и слоях, должно быть одно место для ее размещения и вызова, а в простых случаях это может быть сам объект.
Итак, первый совет: отправьте сервису объект, а не набор аргументов, а затем поместите логику проверки в объект внутри метода с именами IsValid(), например, и проверьте там правила и отправьте обратно список сообщений или словарь для каждого объекта. имя и сообщение об ошибке.