假设我们有一个简单的CreateOrder
命令,它可以具有3个不同的“加密级别”。
透明级别:
class CreateOrder
{
public function __construct(
string $id,
string $paymentMethod,
float $paymentAmount,
string $customerFirstName,
string $customerLastName,
string $billingAddressFirstName,
string $billingAddressLastName,
string $billingAddressStreet,
string $billingAddressCity
array $items // that's the only ninja
) {
// setters
}
}
此级别必须预先暴露所有可能的字段(可以达到30-50甚至更多)。唯一的未知项是项目列表,但是在没有结构的语言中,您将无法避免(除非我们同意命令可以接受值对象)。
分组级别:
class CreateOrder
{
public function __construct(
string $id,
array $payment,
array $customer,
array $billingAddress,
array $shippingAddress,
array $items // that's the only ninja
) {
// setters
}
}
此级别仅接受数组,因为它们将是结构。它比较神秘,但是如果我们想在组之一中添加一个字段,则可以更轻松地进行修改。另一方面,我们必须验证是否使用了正确的密钥,当然还要编写一些文档来描述哪些字段可以接受。
最后一级-忍者:
class CreateOrder
{
public function __construct(array $data) {
// setters
}
}
好吧,如果我们决定使用分组级别,我们已经可以接受忍者了,因为这是同样的问题。我们必须验证所有密钥,并写下一些文档来描述数据有效载荷可能包含的内容。
PS。 请不要指出我可以使用 AddItem 之类的单独命令将透明级别中的商品添加到订单中。假设我必须使用一个事务和一个命令来创建订单。
然后我的问题: