如何确保Command中包含的数据是进行操作所需的数据?

时间:2017-08-04 17:09:03

标签: php cqrs

示例,假设您有一个用户实体。

用户有idusernamepassword。 id在数据库中自动生成。

UpdateUserCommand中,应使用相同的数据。

UpdateUserCommandHandler中,我们需要ID才能进行查询update users set password ... where id = :id

但是如何确保我拥有构建此查询所需的数据?这是if (!somedata) trow new MissingSomeDataException()的唯一原因吗?

示例:

if (!isset($data['id'])) {
   throw new Exception('ID is missing');
if (!isset($data['username'])) {
   throw new Exception('Username is missing');
if (!isset($data['password'])) {
   throw new Exception('password is missing');

$id = (int) $data['id'];
if (!isset($data['id'])) {
   throw new Exception('ID is invalid');

$query = $this->entityManager->createQuery('update Users u ... where u.id = :id)
$this->entityManager->execute($query, $params);

1 个答案:

答案 0 :(得分:1)

从技术上讲,是的。绝对

您必须检查从客户端收到的每个输入,因为它可能由于很多原因而导致格式错误。

此外,您需要检查具有提供ID的用户是否确实存在,如果您稍后要对其进行操作。

<强>然而

有很多方便的选择。

E.g

var array = [{},{},{}];

var copy = _.map(array, _.clone);

或者您可能希望使用任何ORM或CRUD框架来使您的生活(不是PHP解析器)更容易 - 在您将其配置为检查所有输入之后,它将在访问和查询数据库之前自动执行,而且你只会花时间做正面的业务流程级别的工作,而不必费心检查每一个输入位。

Propel网站上的旧好书/作者列表示例将帮助您理解我的意思:Propel ORM