Progetto per coordinatore di collegamento record

0

Sono stagista estivo in una piccola azienda incaricata di sviluppare un prototipo per un microservizio di collegamento (a contatto). Dopo aver fatto qualche ricerca su Google, capisco che il primo passo dovrebbe essere la pulizia / normalizzazione dei miei dati di input prima di poter iniziare in modo efficace il collegamento dei contatti. (Sto pensando di mappare Ben a Benedetto, ecc.)

Ora il componente principale del mio servizio è RecordLinkingManager, ad esempio. In seguito, vorrò essere in grado di testare l'efficacia della mia soluzione combinando diversi meccanismi di pulizia / collegamento. Per questo mi è venuto in mente il seguente prototipo di interfaccia:

var myManager = new RecordLinkingManager();
myManager.addCleanupAgent(myCleanupAgent1);
myManager.addCleanupAgent(myCleanupAgent2);
myManager.addLinkingAgent(myLinkingAgent1, priorityOfMyLinkingAgent1);
myManager.addLinkingAgent(myLinkingAgent2, priorityOfMyLinkingAgent2);
return myManager.linkRecords(myRecords); // this executes the cleanup agents first, then the linking agents 

Qui i secondi parametri per aggiungere LinkingAgent sono gli indici di certezza / priorità dei diversi agenti. Questo indica quanto affidabile / affidabile sia l'output di questi agenti.

Come ho detto, sono solo uno stagista estivo, quindi ho una minima esperienza con la progettazione del software. È una configurazione ragionevole? Come miglioreresti su questo design?

    
posta gen 30.08.2017 - 17:51
fonte

1 risposta

1

Si potrebbe dire qualcosa per dividere la pulizia dal collegamento effettivo, quindi qualcosa di più simile a:

var myCleaningManager = new RecordCleaningManager();
myCleaningManager.addCleanupAgent(myCleanupAgent1);
myCleaningManager.addCleanupAgent(myCleanupAgent2);
myCleaningManager.cleanRecords(myRecords);

var myLinkingManager = new RecordLinkingManager();
myLinkingManager.addLinkingAgent(myLinkingAgent1, priorityOfMyLinkingAgent1);
myLinkingManager.addLinkingAgent(myLinkingAgent2, priorityOfMyLinkingAgent2);
return myLinkingManager.linkRecords(myRecords);

Questo in genere porterà a un codice più pulito mentre si separano le attività in classi dedicate a quell'unica attività, e consentirebbe anche di fare cose come il tempo dell'attività di pulizia e quindi di impostare separatamente l'attività di collegamento che potrebbe aiutare a testare più tardi.

Anche se diversamente, è un inizio decente che si separano i dettagli reali di implementazione in agenti. Se pensi di poter implementare altri meccanismi in un secondo momento, questo è un approccio superiore poiché gli algoritmi di pulizia / collegamento non devono sapere in realtà come viene eseguita la pulizia / collegamento effettiva.

    
risposta data 31.08.2017 - 09:23
fonte

Leggi altre domande sui tag