#1.验证表单上的EmailAddress
我有一个带有emailAddress属性的后端表单类,该属性具有验证逻辑,因此我可以将错误消息返回给用户.我使用以下内容验证所有表单输入:
$form->fillWith($request->input()); if($form->validate()){ $form->dispatch($command); // if synchronous,form takes command's messageBag } return response($form->getMessageBag()->toJson());
#2.在命令处理程序中验证EmailAddress值对象
我有一个命令处理程序,它将获取原始字符串电子邮件并创建一个值对象.如果电子邮件无效,则value对象将在创建时抛出异常:
public function handle($command){ try { $emailAddress = new ValueObjects\EmailAddress($command->emailAddress); // create more value objects... // do something else with the domain... } catch (DomainException $e) { $this->messageBag->add("errors",$e->getMessage()); } catch (\Exception $e) { $this->messageBag->add("errors","unexpected error"); } return $this->messageBag; }
在#1中,我想在发送命令之前捕获验证.但是在#2中,当我构建VO时,重复验证逻辑.
我遇到的问题:
>如果我需要更改电子邮件地址的验证要求,那么我必须更新这两个地方.
>如果我在表单上使用VO,那么在传递给命令时我将不得不再次解构它们.此外,如果我的表单处于不同的有界上下文中,那么我将让VO从另一个有界上下文泄漏域(可能这是必要的吗?).
所以我的问题是,我应该创建一些验证器对象,我的表单验证和VO可以共享/利用吗?或者如何捕获表单和值对象之间的重复验证问题?