Per riorganizzare il codice, cosa scegliere tra la libreria e il servizio?

3

Voglio riorganizzare una grande applicazione con molta duplicazione del codice in più componenti. Inoltre, alcuni codici sono duplicati anche su altre applicazioni.

L'insieme comune di funzionalità che può essere tolto dall'applicazione principale è chiaramente definito.

Ora scrivo una libreria o scrivo un servizio per questa funzionalità; in modo che tutte queste applicazioni continuino a funzionare e vi sia solo una base di codice (di funzionalità comune) da mantenere?

    
posta essbeev 31.03.2012 - 13:31
fonte

3 risposte

6

C'è una buona ragione per cui ogni applicazione Linux pesantemente usata e ampiamente sviluppata è strutturata come un eseguibile ( eg , /usr/bin/blarf ) che gestisce l'input e output della riga di comando e una libreria ( eg , /usr/lib/libblarf.so ). L'idea è che il lavoro reale avvenga all'interno delle funzioni o dei metodi della libreria, che può essere chiamato da qualsiasi programma che vuole eseguire l'operazione e che l'interfaccia della riga di comando è solo uno dei possibili modi per chiedi che ciò accada. Ad esempio, il Subversion sistema di controllo versione ha libsvn , che viene utilizzato sia dal comando svn che dai vari GUI.

Quando dici " faccio una biblioteca o scrivo un servizio ", suppongo per "biblioteca", intendi qualcosa come libsvn , e che per "servizio", tu significa qualcosa come un'interfaccia REST . Direi, inizia rifattorizzando la libreria dal tuo programma principale e poi crea un servizio che usa la libreria se ne senti la necessità.

    
risposta data 03.04.2012 - 03:58
fonte
2

Come usi le parti del codice che vuoi inserire in librerie / servizi?

  • Se si desidera utilizzarli da più macchine senza dover distribuire le librerie su tutti loro, anziché utilizzare i servizi (con le chiamate REST o come servizio WCF predefinito, in base ai requisiti precisi).

  • Se vuoi la forma più semplice, senza alcuna comunicazione client-server, usa le librerie.

Si noti che è possibile utilizzare entrambi: una libreria che ha un servizio associato che funge da interfaccia. In questo modo, puoi distribuire la libreria quando appropriato e accedervi tramite il servizio in altri casi.

    
risposta data 31.03.2012 - 13:51
fonte
1

Il fatto che tu abbia "duplicazione del codice" significa che il tuo codice è in esecuzione in-process, quindi andrei con una libreria. Ciò accadrà il tuo codice per te in ogni caso, così come Ross Patterson dovrebbe sempre andare con quell'opzione e costruire sulla parte superiore della libreria.

L'out-of-process sarà sempre più lento ma potrebbero esserci dei vantaggi. Si può andare con Rest, WS, XML-RPC o persino un bus di servizio (specialmente quando si fanno chiamate asincrone). Tuttavia, dipende totalmente da come devi raggiungere il tuo codice.

Se non ci sono necessità o requisiti diretti per una soluzione out-of-process, lo eviterei.

    
risposta data 03.04.2012 - 06:29
fonte

Leggi altre domande sui tag