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

StackOverflow https://stackoverflow.com/questions/2422738

Вопрос

Итак, я разрабатываю автономный веб-сервис (используя RestLET в качестве фреймворка).Мое приложение разделено на 3 слоя:

  • Уровень данных (непосредственно над базой данных предоставляет API-интерфейсы для подключения к базе данных / запроса к ней и объект базы данных)
  • Объектный слой (отвечает за сериализацию с уровня данных...предоставляет объекты, которые клиентский уровень может использовать, не беспокоясь о базе данных)
  • Клиентский уровень (Этот уровень является веб-сервисом RestLET...в основном просто создает объекты из объектного слоя и выполняет запрос веб-сервиса)

Теперь для каждого объекта, который я создаю на объектном уровне, я хочу использовать разные учетные данные (чтобы я мог изолировать каждый объект ...).Объектный уровень не должен знать точные учетные данные (т. Е. URL-адрес login / pw / DB и т.д.).

Каков был бы наилучший способ справиться с этим?Я думаю, что у меня должен быть объект базы данных суперкласса в моем слое данных...и каждый подкласс будет содержать необходимую информацию для входа в систему...таким образом, мой объектный слой может просто перейти Database db = new SubDatabase(); а затем продолжайте использовать эту базу данных.

На уровне клиента они просто могли бы пойти ItemCollection items = new ItemCollection(); и не имеют ни малейшего представления / контроля над базой данных, которая подключается.

Я спрашиваю об этом, потому что пытаюсь сделать свою платформу расширяемой, чтобы другие могли легко создавать сервисы на моей платформе.

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

Не стесняйтесь задавать вопросы, если это сбивает с толку.Спасибо!

Моя платформа - Java, фреймворк REST, который я использую, - RestLET, моя база данных - MySQL.

Это было полезно?

Решение

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

В этой ситуации вам нужно подумать о любых шаблонах проектирования, которые могли бы вам помочь Я могу вспомнить шаблон singleton , в котором вы создаете один экземпляр и используете его на уровне объекта, таким образом избегая показа пользователям каких-либо подробностей о учетных данных и URL.

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

Другие советы

Мое предложение состоит в том, чтобы использовать JTA, где вы можете использовать более одной базы данных с соответствующим количеством источников данных.вы можете обратиться сюда за дополнительной информацией https://test.kuali.org/confluence/display/KULRICE/Datasource+and+JTA+Configuration

Я бы повторил комментарии @saugata.Посмотрите на Весна и внедрите вашу реализацию источника данных (или заглушки для тестирования!) в ваш объектный слой в вашей конфигурации Spring.Это должно помочь вашей общей архитектуре приложения несколькими способами:

  1. Вы сможете переключать базы данных (либо экземпляры, либо реализации) "на лету" без перекомпиляции кода.
  2. Вы полностью абстрагируете источник данных от его реализации, что позволяет вам заменить базу данных на веб-службу, реализацию очереди или заглушку.
  3. Разделение вашего приложения таким образом упростит его тестирование.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top