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

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

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

Теперь для каждого объекта, который я создаю на уровне объектов, я хочу использовать разные учетные данные (чтобы я мог помещать каждый объект в песочницу...). Уровень объекта не должен знать точные учетные данные (например, URL-адрес входа/пароля/БД и т. д.).

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

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

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

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

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

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


person Polaris878    schedule 11.03.2010    source источник
comment
Если вы используете Spring или любой другой сервер приложений, вы можете настроить bean-компоненты и источники данных соответственно. То же самое может быть введено или найдено вашим DAO. Если вы программируете интерфейс и не используете какие-либо специфические функции БД, тогда он будет работать нормально.   -  person saugata    schedule 11.03.2010


Ответы (3)


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

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

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

person gmhk    schedule 11.03.2010

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

person GuruKulki    schedule 11.03.2010

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

  1. Вы сможете переключать базы данных (экземпляры или реализации) на лету без перекомпиляции кода.
  2. Вы полностью абстрагируете источник данных от его реализации, что позволит вам заменить базу данных веб-службой, реализацией очереди или заглушкой.
  3. Разделение вашего приложения таким образом облегчит его тестирование.
person Vinnie    schedule 11.03.2010