Как организовать несколько учетных данных базы данных в приложении и управлять ими?
-
19-09-2019 - |
Вопрос
Итак, я разрабатываю автономный веб-сервис (используя 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.Это должно помочь вашей общей архитектуре приложения несколькими способами:
- Вы сможете переключать базы данных (либо экземпляры, либо реализации) "на лету" без перекомпиляции кода.
- Вы полностью абстрагируете источник данных от его реализации, что позволяет вам заменить базу данных на веб-службу, реализацию очереди или заглушку.
- Разделение вашего приложения таким образом упростит его тестирование.