Supponiamo di sviluppare un sistema REST per un'azienda aziendale per esporre le risorse aziendali in un'applicazione basata su Java. Alla fine hai una sola applicazione web e librerie di dominio. La mia domanda è dove componenti e servizi dovrebbero vivere in queste librerie di dominio e cosa dovrebbe esistere nell'applicazione stessa.
Per un'azienda ipotetica potremmo avere diverse aree di dominio.
- Relazioni con i clienti
- Ordini di vendita dei clienti
- Fabbricazione
- Struttura del prodotto
- Catena di fornitura
- Warehousing
Dati questi domini avremmo oggetti dominio e servizi oggetto per la persistenza. Potremmo quindi separarli ulteriormente in implementazioni
- Relazioni con i clienti
- Relazioni con i clienti - JDBC Impl
- Ordini di vendita dei clienti
- Ordini cliente - JDBC Impl
- Fabbricazione
- Produzione - JDBC Impl
- Struttura del prodotto
- Struttura del prodotto - JDBC Impl
- Catena di fornitura
- Catena di fornitura - JDBC Impl
- Warehousing
- Magazzino - JDBC Impl
Ora sta iniziando a sembrare complesso solo a causa del numero di singole librerie che gestiamo. Mi chiedo se abbiamo persino bisogno di separarci da un tale livello e potremmo semplicemente avere i tre.
- Business - Interfaccia
- Business - JDBC Impl
- Applicazione REST
La mia seconda parte della mia domanda riguarda le classi di servizio e le classi di gestione che dovrebbero vivere. Dato il nostro Magazzino di cui sopra abbiamo bisogno di oggetti di dominio per rappresentare pick-facce, una classe DAO per gestire l'oggetto pick-face e, infine, un componente di servizio per la nostra applicazione di riposo. Per questo potremmo vedere la seguente struttura.
- Warehousing
- PickFace
- PickFaceDAO
- Magazzino - JDBC Impl
- JdbcPickFaceDAO
- Applicazione ReST
- PickFaceController
Da un lato PickFaceController
è il migliore all'interno dell'applicazione ReST in quanto l'applicazione può quindi gestire manualmente i servizi per questo controller e potrebbe essere necessario personalizzare la configurazione.
D'altro canto, PickFaceController
potrebbe essere migliore nel progetto Warehousing poiché riguarda solo il modulo di magazzino, tuttavia l'applicazione ReST potrebbe teoricamente utilizzare i localizzatori di servizio per trovare servizi in altre librerie.
SO quali sono gli approcci di successo utilizzati? Quando sai quando sei andato lontano nel separare o non fatto abbastanza? Come fai a sapere qual è il posto migliore dove mettere qualcosa?