Это то, для чего Командные объекты предназначены.
Причина, по которой вы не можете просто поменять валидацию, состоит в том, что валидация также помогает определить структуру базы данных, например, задать для поля значение, не равное NULL, или не пустое, или иметь определенную длину. Например, отключение ненулевого значения может привести к нарушению структуры базы данных.
Командные объекты, с другой стороны, предназначены для того, чтобы иметь собственный уникальный набор правил проверки . Это не самый чистый метод (теперь вы отслеживаете одну и ту же структуру в более чем одной ситуации), но во многих отношениях он лучше.
- Он позволяет безопасно принимать входные параметры, не беспокоясь о том, что что-то, что не должно обрабатываться, устанавливается.
- Он создает более чистые контроллеры, поскольку вся логика проверки может обрабатываться в объекте Command, а не обрабатываться методом контроллера.
- Они позволяют проверять свойства, которые на самом деле не существуют на объекте (например, поля проверки пароля).
Если вы считаете, что вам действительно нужно несколько наборов ограничений, вы, скорее всего, либо a) чрезмерно усложняете объект домена, чтобы представить больше информации, чем на самом деле (возможно, разбейте его на несколько to-one связанных объектов), или b) , неправильно устанавливая ограничения в первую очередь. †
По моему опыту, обычно a происходит, когда вы чувствуете необходимость поменять ограничения.
† Это, как говорится, может (редко) иметь смысл. Но объекты Command являются лучшим решением в этой ситуации.