Необходимое условие

Перед чтением этой статьи убедитесь, что вы хорошо разбираетесь в интерфейсе Go.

Введение

Шаблон команды подпадает под шаблон поведения, этот шаблон инкапсулирует запрос как объект. Таким образом, несмотря на то, что у вас так много объектов с его уникальным действием, каждый объект можно изолировать, чтобы сосредоточиться только на его собственном поведении, и вызывающей стороне не нужно знать детали реализации соответствующего запрошенного объекта.

Сначала деньги, затем команда

Деньги? да, я люблю деньги и люблю большинство из вас. И пока я думаю о деньгах, все дело в команде. Деньги правят миром - конечно, после Бога и вашей мамы - и в этом примере я рад познакомить вас с денежным бизнесом.

В последнее время Джо фон Боруцманн работает менеджером в компании, занимающейся одноранговым кредитованием. Бизнес очень простой, человек может стать кредитором или заемщиком.

Исходя из этого требования, представив деньги, вы представите бедных людей, которым нужны деньги. А у другого человека много денег, и он готов ссудить свои деньги кому-нибудь еще. Но давайте упростим домен для нашего кода, чтобы он регистрировал только данные о ссуде.

Итак, мы создадим структуру / домен ссуды, как показано ниже:

Я думаю, что атрибуты и функции достаточно ясны, поэтому перейдем к следующему шагу.

Каждая операция по кредитованию P2P должна иметь порядок транзакции, чтобы мы могли создать службу, которая может предоставлять ссуды и занимать деньги.

Сначала создайте интерфейс заказа, в шаблоне команд этот интерфейс обычно называется командным интерфейсом.

Во-вторых, создайте службу заимствования, которая реализует командный интерфейс.

В-третьих, создайте сервис кредитования, который также реализует командный интерфейс.

В-четвертых, нам нужен кассир или кассир, который будет посредником между кредитором и заемщиком. На данный момент в Command Pattern это также известно как invoker

Видите ли, вызывающей стороне все равно, какое действие нужно там выполнить. Потому что, как и в реальном мире, кассир в банке будет знать, одолжит ли кредитор деньги, а заемщик займёт деньги. Таким образом, кассир занимается только выполнением заказа.

В-пятых, мы добавим основную функцию для запуска этого командного шаблона.

Как видите, кассиру нужно только передать объект lendMoney или заимствовать в качестве параметра запроса. Результат можно увидеть ниже:

Lending money 9000.00
Borrowing money 9000.00

Кроме того, с помощью этого шаблона вы можете расширить возможности вашего кода. Например, если есть сверка по уже проведенной ссуде.

Чтобы добавить сверка, нам нужно добавить новую функцию в домене ссуды и новую службу сверки.

Во-первых, добавьте функцию согласования в домене ссуды.

Во-вторых, создайте новую службу под названием служба согласования.

Наконец, основная функция будет выглядеть, как показано ниже.

Запустите этот новый код, результат будет следующим:

Lending money 9000.00
Borrowing money 9000.00
Reconcile Loan Id A-1 with amout 9000.00

Заключение

Основываясь на приведенном выше объяснении, мы можем сделать код более читабельным, и каждая служба несет единственную ответственность. Кроме того, вызывающей стороне необязательно использовать шаблон if/else для выполнения определенного действия.

Представьте, что у вас есть комплексные услуги по кредитованию и заимствованию в реальной системе P2P-кредитования. С помощью этого шаблона команд каждая команда для соответствующей функции может быть разделена на отдельный файл / службу. Это поможет, если есть требование удалить определенную функцию, вы можете удалить соответствующий файл / службу. Кроме того, чтобы добавить новую функцию, добавьте новый файл для новой службы. Таким образом, другая служба, которую не нужно менять, не получит никаких изменений кода, которые могут вызвать затруднения.

Дополнительные примечания: Gopher - это талисман Go Language (используется как часть изображения обложки в этой статье), созданный Рене Френч. Лицензия Creative Commons Attribution 3.0