Domanda

Ok, sto progettando un servizio web stand-alone (utilizzando Restlet come il mio quadro). La mia domanda è diviso in 3 strati:

  • Data Layer (appena sopra il database, fornisce le API per il collegamento a / interrogazione del database, e un oggetto di database)
  • livello Oggetto (responsabile per la serializzazione dallo strato di dati ... fornisce oggetti che lo strato client può utilizzare senza preoccuparsi di database)
  • strato client (Questo strato è il servizio web Restlet ... fondamentalmente solo crea oggetti dal livello di oggetto e adempie richiesta webservice)

Ora, per ogni oggetto che creo nello strato oggetto, voglio utilizzare credenziali diverse (in modo da poter sandbox ogni oggetto ...). Il livello di oggetto non deve conoscere le credenziali esatte (IE il login / pw / DB URL etc).

Quale sarebbe il modo migliore per gestire questo? Sto pensando che avrei dovuto avere un oggetto super-classe Database nel mio livello di dati ... e ogni sottoclasse conterranno la richiesta di log-in informazioni ... in questo modo il mio livello di oggetto può solo andare Database db = new SubDatabase(); e poi continuare a utilizzare tale database.

Al livello di client, avrebbero solo essere in grado di andare ItemCollection items = new ItemCollection(); e non hanno idea / il controllo della base di dati che viene collegato.

Mi sto chiedendo questo perché sto cercando di fare la mia piattaforma estendibile, in modo che altri possano facilmente creare servizi fuori della mia piattaforma.

Se qualcuno ha qualche esperienza con questi problemi architettonici o come gestire questo genere di cose mi farebbe piacere qualche intuizione o consigli ...

Sentitevi liberi di porre domande se questo è fonte di confusione. Grazie!

La mia piattaforma è Java, il quadro REST che sto utilizzando è Restlet, il mio database è MySQL.

È stato utile?

Soluzione

Mi sento quello che lei ha spiegato è sensibile e si sta cercando di non esporre i dettagli del database e le credenziali per il livello cleint.

Per questa situazione, è necessario pensare di eventuali modelli di progettazione che potrebbero aiutarvi Mi viene in mente il pattern Singleton, in cui si crea un caso e utilizzarlo nello strato oggetto, evitando così mostrare alcun dettagli sulle credentails e URL per gli utenti.

Seconda opzione, quello che ottengo nella mia mente è l'uso dello strato di ibernazione, che vi aiuterà a nascondere i dettagli e basta accedere gli oggetti ORM e si può ottenere ciò che si sta cercando.

Altri suggerimenti

Il mio suggerimento è quello di utilizzare JTA dove è possibile utilizzare più di un database con relativo numero di origini dati. è possibile fare riferimento qui per maggiori informazioni https: //test.kuali .org / confluenza / display / KULRICE / Datasource + e + + JTA Configuration

Mi associo commenti @ di Saugata. Guardate primavera e iniettare l'implementazione di origine di dati (o stub per il test!) Al vostro livello di oggetti in primavera configurazione. Questo dovrebbe aiutare la vostra architettura complessiva applicazione in diversi modi:

  1. Sarete in grado di passare i database (sia istanze o implementazioni) al volo senza codice ricompilazione.
  2. Avrete astratto l'origine dati completamente dalla sua implementazione -. Che consente di scambiare un database per un servizio web, l'implementazione di coda, o un mozzicone
  3. Il disaccoppiamento l'applicazione in questo modo sarà più facile per testare.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top