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

Как спроектировать уровень доступа к данным, который подключается к двум разным базам данных?
Как спроектировать уровень доступа к данным, который подключается к двум разным базам данных? - htxp @ Unsplash

Ну, мы мало знаем о вашем приложении, его размере и требованиях к доступу к базе данных. Но обычный стандартный подход, который я бы рекомендовал здесь, таков:

  1. Начните создавать некоторый независимый от СУБД интерфейс для вашего DAL, который соответствует вашим потребностям, особенно при использовании из вашего устаревшего приложения. Важнейшая часть здесь состоит в том, чтобы избегать использования динамического SQL в качестве параметров в этом интерфейсе, поскольку диалекты SQL чаще всего слишком специфичны для СУБД, чтобы можно было использовать SQL в качестве уровня абстракции.

  2. Сделайте две разные реализации этого интерфейса, по одной для каждой СУБД. Здесь такие вещи, как пользовательские запросы, могут потребоваться реализовать дважды, каждый раз с реализацией, адаптированной для конкретной СУБД.

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

Конечно, когда вы можете выбрать технологию реализации для шага 2, которая позволяет обращаться к разным СУБД с помощью одного и того же кода, большая часть кода окажется на шаге 3 только в одном классе. В комментариях вы получили несколько предложений, таких как использование Dapper или EF без LINQ. Но это не обязательно решение «все или ничего», вы можете обобщить некоторые части и позволить некоторым другим существовать в качестве конкретных реализаций.

Это также вопрос размера: для «небольшого» уровня доступа к данным может быть приемлемо оставаться с простой технологией, такой как ADO.NET, и жить с некоторой повторяющейся логикой запросов. Для более крупного DAL ожидаемые затраты на введение еще одного уровня абстракции, такого как ORM или микро-ORM, могут быть намного ниже затрат на поддержку сотен дублирующих запросов.

TLDR: вместо того, чтобы пытаться принять решение заранее, идите по пути, который позволит вам принимать решение постепенно и постепенно, по ходу дела.

Рекомендую посмотреть эти видео для лучшего погружения в вопрос:

Прикрепленное видео 1 - Как спроектировать полезную CMDB

Прикрепленное видео 2 - Cекционирование данных в sql server 2012 и windows azure sql database


LetsCodeIt, 9 марта 2023 г., 18:41