У меня есть приложение ETL, которое извлекает данные из исходной базы данных (для которой у меня есть только права на чтение) и загружает их в мою базу данных SQL Server. Извлечение выполняется с использованием запросов ODBC из приложения C # с жестко закодированными операторами SQL. Загрузка выполняется с помощью хранимых процедур в моей базе данных SQL Server. Сначала все это работало нормально, но по мере роста числа клиентов мне пришлось вводить ряд специфических для клиента изменений в извлечении (код c #) и загрузке (хранимые процедуры).
Мой вопрос: как лучше всего справляться с этими специфическими для клиента различиями?
Ниже приведены мои первоначальные соображения о возможных решениях, я буду рад любым комментариям. Такое ощущение, что, возможно, есть лучший способ сделать это с помощью контроля версий? Создание филиалов для разных клиентов? (текущий источник контроля - SourceSafe, но я использую GIT с целью его реализации в ближайшее время)
Код приложения (C #)
В настоящее время я думаю о том, чтобы добавить параметр app.config для идентификации клиента и использовать его для запуска различных методов в извлечении.
Хранимые процедуры (SQL Server)
Я мог бы хранить дубликаты любых процедур, которые могли бы быть специфическими для клиента, с суффиксом с именем клиента. Затем при развертывании я могу удалить процедуры для других клиентов и переименовать ту, которую я хочу сохранить.
Итак, скажем, у меня есть клиент A и клиент B, и я могу получить 3 версии процедуры:
LoadDepartment ()
LoadDepartmentClientA ()
LoadDepartmentClientB ()
При развертывании для клиента A я удаляю LoadDepartment () и LoadDepartmentClientB (), затем переименовываю LoadDepartmentClientA () в LoadDepartment ().
Это означает, что необходимо хранить дубликаты процедур, которые могут привести к осложнениям при обслуживании.