Pergunta

Ok, então eu estou projetando um serviço web stand-alone (usando Restlet como meu quadro). Meu aplicativo é dividido em 3 camadas:

  • Camada de dados (apenas acima da base de dados, fornece APIs para conectar a / banco de dados de consulta, e um objecto da base de dados)
  • camada Objeto (responsável pela serialização da camada de dados ... fornece objetos que a camada de cliente pode usar sem se preocupar com banco de dados)
  • camada Cliente (Esta camada é o serviço Restlet web ... basicamente apenas cria objetos a partir da solicitação webservice camada de objeto e cumpre)

Agora, para cada objeto que criar na camada de objeto, eu quero usar credenciais diferentes (para que eu possa sandbox cada objeto ...). A camada de objeto não deve saber as credenciais exatas (ou seja, o login / PW / DB URL etc).

Qual seria a melhor maneira de gerenciar isso? Eu estou pensando que eu deveria ter um objeto de classe de banco de dados de super na minha camada de dados ... e cada subclasse irá conter o necessário log-in informações ... desta forma a minha camada de objeto pode simplesmente ir Database db = new SubDatabase(); e depois continuar usando esse banco de dados.

No nível do cliente, eles simplesmente ser capaz de ir ItemCollection items = new ItemCollection(); e não têm idéia / controle sobre o banco de dados que fica conectado.

Estou perguntando isso porque eu estou tentando fazer minha plataforma extensível, para que outros possam facilmente criar serviços fora da minha plataforma.

Se alguém tem alguma experiência com estes problemas de arquitetura ou como gerir esse tipo de coisa que eu aprecio qualquer insight ou aconselhamento ...

Sinta-se livre para fazer perguntas se isso é confuso. Obrigado!

A minha plataforma é Java, o quadro resto eu estou usando é Restlet, meu banco de dados é MySQL.

Foi útil?

Solução

Eu sinto o que você explicou é sensata e que você está tentando para não expor os detalhes do banco de dados e credenciais para o nível cleint.

Para esta situação, você precisa pensar de quaisquer padrões de design que podem ajudá-lo Eu posso pensar do padrão Singleton, onde você cria uma instância e usá-lo na camada de objeto, evitando assim mostrando quaisquer detalhes sobre os credentails e URL para os usuários.

A segunda opção, que eu recebo em minha mente é o uso da camada de hibernação, que irá ajudá-lo a esconder os detalhes e apenas acessar os objetos ORM e você pode obter o que você está procurando.

Outras dicas

A minha sugestão é usar JTA onde você pode usar mais de um banco de dados com o respectivo número de fontes de dados. você pode consultar aqui para mais informações https: //test.kuali .org / confluência / display / KULRICE / Datasource + e + JTA + Configuração

Gostaria echo @ de Saugata comentários. Olhada Primavera e injetar sua implementação fonte de dados (ou canhotos para o teste!) Para sua camada de objeto em seu Primavera configuração. Isso deve ajudar a sua arquitectura geral do aplicativo em um número de maneiras:

  1. Você vai ser capaz de mudar os bancos de dados (quer instâncias ou implementações) na mosca sem recompilar o código.
  2. Você vai abstrair a fonte de dados completamente da sua implementação -. Permitindo que você troque um banco de dados para um serviço web, implementação de fila, ou um esboço
  3. A dissociação sua aplicação, desta forma, torná-lo mais fácil de teste.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top