2016-06-02 2 views

ответ

4

Основным преимуществом модели саги является то, что она позволяет брать логику и данные, которые в противном случае были бы распределены по всей системе (и различным заданиям), и вытащить все это в один класс, лучше следовать за одним принцип ответственности. После этого вы получите все другие преимущества, связанные с хорошими практиками программного обеспечения - лучшая тестируемость, ремонтопригодность и т. Д.

+0

Большого спасибо Уди. Можете ли вы указать мне простой фиктивный пример, который реализует что-то в обоих направлениях, чтобы я мог понять разницу? Я согласен с тем, что данные состояния будут распространяться по всей системе, но, возможно, мой экзистенциальный вопрос: если эти данные составляют часть бизнес-процесса (и нам может потребоваться запросить данные состояния для отчетов, чтобы клиент знал текущий статус , и т. д.) не имеет смысла хранить данные состояния вместе с бизнес-данными? Еще раз спасибо. – Miguel

+0

Я расскажу следующее о списке вещей. Но серьезно, вы можете напрямую запросить данные саги - он сохраняется в обычной БД. –

+0

Я думаю, что вижу ... Итак, процесс с использованием SagaData действует как координатор распределенной транзакции с доступом к состоянию в нескольких системах, участвующих в транзакции, верно? –

0

Чтобы показать вам реальную пользу модели Saga, я покажу вам два примера.

  1. Представьте, что у вас есть ориентированная на обслуживание архитектура с сотнями распределенных хостов. Клиент делает заказ, который запускает одну или несколько саг. У каждой саги есть своя бизнес-логика. Обработчик для каждой заданной саги можно разделить между разными хостами, и вам не нужно проверять состояние заказа на каждое сообщение, NServiceBus неявно проверяет состояние саги, сопоставляя его с идентификатором заказа или другими атрибутами, и если он все еще открыт, вы получите его ваш контекст данных.

  2. Вы также можете использовать эту модель в качестве шаблона без использования NServiceBus. Представьте, что вы разрабатываете видеоигру и хотите отслеживать некоторые пользовательские комбо. Каждый раз, когда игрок нажимает на вас, вы открываете сагу и добавляете бонусные очки, управляя другим быстрым входом. Как только игрок задерживается в течение некоторого времени между входами и сагой, закрывает себя, экономя общий балл для комбо.

В чем преимущества Saga?

1) Ваша бизнес-логика инкапсулирована в одном месте - сага.

2) Вы можете легко его расширить, добавив дополнительную сагу или удалив их. Вы также можете перенести их на другие обработчики или хосты.

3) Вам не нужно знать, что данные в базе данных требуются в случае миграции, вам просто нужно перенести саги, которые содержат всю необходимую информацию