Хорошо, где я работаю, у нас есть довольно значительное количество систем, написанных за последние пару десятилетий, которые мы поддерживаем.
Системы разнообразны тем, что несколько операционных систем (Linux, Solaris, Windows), несколько баз данных (несколько версий oracle, sybase и mysql) и даже несколько языков (C, C ++, JSP, PHP и множество другие).
Каждая система достаточно автономна, даже за счет ввода одних и тех же данных в несколько систем.
Руководство недавно решило, что мы должны выяснить, что нужно для того, чтобы все системы с удовольствием общались и обменивались данными.
Имейте в виду, что, хотя мы можем вносить изменения в программное обеспечение в любой из отдельных систем, полное переписывание какой-либо одной системы (или более) не является чем-то, что руководство может развлечь.
Первой мыслью нескольких разработчиков было прямое: если системе A нужны данные из системы B, она должна просто подключиться к базе данных системы B и получить ее. Аналогично, если ему нужно предоставить данные B, он должен просто вставить их в базу данных B.
Из-за путаницы используемых баз данных (и версий) другие разработчики считали, что у нас должна быть одна новая база данных, объединяющая таблицы из всех других систем, чтобы избежать необходимости манипулирования несколькими соединениями. Делая это, они надеются, что мы сможем объединить некоторые таблицы и избавиться от избыточного ввода данных.
Это примерно то время, когда меня привлекли к моему мнению по поводу всего этого беспорядка.
Вся идея использования базы данных в качестве средства системной коммуникации пахнет для меня забавно. Бизнес-логику нужно будет разместить в нескольких системах (если система A хочет добавить данные в систему B, она лучше понимает правила B, касающиеся данных, прежде чем выполнять вставку), некоторым системам, скорее всего, придется выполнить какую-либо форму опроса базы данных, чтобы найти При любых изменениях их данных постоянное обслуживание будет головной болью, так как любое изменение в схеме базы данных теперь распространяется на несколько систем.
Моей первой мыслью было выделить время и написать API / службы для различных систем, которые после написания можно было легко использовать для передачи / извлечения данных назад и вперед. Многие другие разработчики считают, что это чрезмерно и гораздо больше работы, чем просто использование базы данных.
Итак, как лучше всего заставить эти системы общаться друг с другом?