Использование паттерна «Сценарий транзакции» (Transaction script) на примере работы с 1С в C#

«Сценарий транзакции» (Transaction script) один из простейших паттернов, представленных в книге Мартина Фаулера «Архитектура корпоративных программных приложений».

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

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

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

Более того многие стандартные механизмы 1С, например, проверка заполнения реквизита, не работают при обмене данными через COM соединение. Поэтому, обмен между информационной базой 1С и внешней программой является весьма уязвимым местом. Но, паттерн «Сценарий транзакции позволяет нивелировать данную проблему.

Рассмотрим пример бизнес-транзакции в виде добавления в информационную базу «Библиотека» нового автора. У автора, помимо стандартных реквизитов, имеются два дополнительных:

  • Классика – является ли автор «классиком» (булево);
  • Жанр – жанр творчества автора (строка, реквизит обязателен к заполнению).

Добавление нового автора производится из внешней программы, которая помимо информационной базы 1С, сохраняет сведения об авторе в текстовый файл.

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

Вначале подготовим данные для записи. Текст для файла и новый элемент справочника «Авторы» в информационной базе 1С.

Процесс работы с 1С в C# не рассматриваем, так как он подробно описан в [2].

Далее начинаем сам процесс записи. Вначале информационная база 1С.

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

После информационной базы 1С записываем текстовый файл.

Здесь в случае возникновения проблем (например, отсутствие прав на запись в целевую папку) для возбуждения исключения не требуется дополнительных действий.

В обработку исключений помещаем механизм отката на случай, если данные успешно записаны в информационную базу 1С, а в файл нет.

Ниже представлен полный код метода реализующего описанную бизнес-транзакцию.

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

Источники
  1. Фаулер М. Архитектура корпоративных программных приложений.
  2. Стрелец Coder.Работа с 1С в C#. Способ 1. Работа с объектной моделью 1С.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *