Может ли сообщение шины содержать массивы

Допустим, у нас есть простой 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.
Пожалуйста, не указывайте мне, что предметы в Прозрачный уровень можно добавить в заказ с помощью отдельной команды, например Добавьте предмет. Давайте просто предположим, что я должен создать заказ, используя одну транзакцию и одну команду.

Мои вопросы тогда:

  • Есть ли шаблон / правило / книга / мнение, описывающее, какой путь лучше?
  • Как сделать выбор (это действительно общий вопрос, но каждый раз, когда я сталкиваюсь с подобной проблемой, у меня возникает проблема с выбором, поскольку вариантов просто много, но не достаточно строгих правил, которым нужно следовать)
  • Может быть, вместо того, чтобы просто сохранять примитивы в полезной нагрузке сообщения, мы можем использовать объекты-значения?
  • Но если мы решили использовать объекты-значения, должна ли полезная нагрузка сообщения (объекты-значения) быть полностью сериализуемой примитивам?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector