На работе у нас есть собственная устаревшая CRM-система (в дальнейшем тексте будет называться LS), которая используется на предприятии. LS также используется для хранения некоторых платежей клиентов. LS передается на аутсорсинг, и моя компания не владеет кодом, поэтому (прямые) изменения в коде приложения не могут быть внесены моей компанией. Однако нам принадлежит база данных, которую использует LS, и ее данные. Способ управления данными заключается в использовании единой базы данных и огромного количества таблиц, в которых хранится информация, необходимая для нескольких секторов (например: продажи, финансы, маркетинг и т. д.). Это приводит к сложному графику взаимосвязей и трудным для понимания таблицам.
Теперь у нас есть еще одно приложение (в следующем тексте оно будет называться
ConfApp), которое была разработана собственными силами и использует часть данных из LS, чтобы финансовый сектор мог генерировать своего рода подтверждения клиентских платежей для наших клиентов. ConfApp также используется в бухгалтерском секторе для подтверждения платежей наших клиентов, но у бухгалтерского учета другие потребности и требования по сравнению с финансами. Используя жаргон DDD, мы можем сказать, что существует два разных ограниченных контекста: один для бухгалтерского учета и один для финансов.
В настоящий момент ConfApp запрашивает базу данных LS напрямую, чтобы получить необходимые данные о клиентах и платежах. Поскольку он запрашивает базу данных LS напрямую, ConfApp жестко связан с базой данных, и ему необходимо знать о столбцах и связях, которые его не интересуют, а также о любых изменениях в базе данных LS. Вот почему, следуя практике DDD, я хочу создать отдельную схему для каждого ограниченного контекста в базе данных ConfApp. Каждая схема будет иметь таблицу «Клиент», но только ту информацию, которая интересует этот конкретный ограниченный контекст (например, бухгалтерскому учету требуется один набор адресов электронной почты для клиентов, а финансам — другой набор адресов электронной почты). Для этого ConfApp должен быть интегрирован с LS. Проблема, с которой я столкнулся, заключается в том, что я не знаю, какой тип интеграции использовать, поскольку LS не может быть изменен.
Варианты, о которых я думал, - это следующее:
1. Обмен сообщениями => кажется сложным, поскольку мне нужны только данные, а не поведение. Кроме того, это может оказаться сложной задачей, поскольку, как говорилось ранее, прямое изменение исходного кода LS невозможно. Возможно, создание какого-то приложения-адаптера, которое подключается к базе данных LS и при изменениях отправляет сообщения приложениям-подписчикам. Тем не менее кажется сложным.
2. Интеграция базы данных => Отслеживание изменений или какой-либо другой метод отслеживания изменений базы данных. Должно быть проще, чем Вариант 1, решает проблему получения только тех данных, которые нужны ConfApp, но не решает проблему связи между ConfApp и базой данных LS. Вместо реализации логики синхронизации в ConfApp это мог бы сделать другой проект, но есть ли причина не использовать вместо этого Messaging? И какой метод синхронизации данных использовать? Обе системные базы данных являются экземплярами SQL Server.
Дюжины других приложений следуют этой схеме интеграции с LS, поэтому решение для этих систем также необходимо будет применить. ConfApp не нужны данные «в реальном времени», они могут храниться до 1 месяца. Некоторым другим системам нужны более свежие данные (например, вчерашние). Я никогда не работал с мессенджерами на практике. Мне кажется, это излишнее решение.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ossibly-ot
Является ли системная интеграция с использованием обмена сообщениями между этими двумя системами (и, возможно, другими) ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение