Ho il compito di cambiare qualche codice procedurale Java nel modulo riutilizzabile Object Oriented. Si tratta di un'utilità di generatore XML che utilizza la velocità per la generazione XML. Esistono anche arricchimenti delle regole aziendali, tutti configurabili nelle tabelle del database. Ho già rimosso enormi istruzioni if-else per le regole e le ho trasformate in oggetti Rule con classi e interfacce astratte che altre applicazioni possono estendere e implementare. Tuttavia mi trovo in difficoltà con la riprogettazione della classe generale - XMLGeneratorUtil, che prende una connessione JDBC, Logger e Properties nel suo costruttore e fa un sacco di cose nel costruttore come la costruzione di strutture dati differenti (contenenti dati statici) dal database .
Ora, so che non è bello connettersi al Database da Costruttore, ma se cambio qualche cosa come sotto:
XMlGeneratorUtil xmlUtil = new XMLGeneratorUtil();
xmlUtil.initialize(Conenriches conn, Properties prop , Logger logger) // Do DB Connections and all initializations here
xmlUtil.generateXML(data); // Data is a HashMap containing busines data that goes into the XML
-
Come posso essere sicuro che gli utenti della mia chiamata di utilità inizializzino prima di chiamare generateXML? Devo creare un Wrapper che crea internamente un oggetto leggero e poi lo inizializza senza che l'utente lo sappia?
-
Inoltre, è utile che la mia libreria riutilizzabile accetti Connection come parametro? L'idea è che l'applicazione chiamante della mia utility può scegliere di gestire la propria connessione, quindi la passano alla mia API
-
Contro l'SRP (principio di Responsabilità Unica) il XMLGeneratorUtil manipola i dati aziendali (che alla fine entrano nei dati XML) e genera XML. L'arricchimento dei dati dovrebbe essere esposto come API diversa? (E poi l'utente chiama XMLGeneratorUtil)