Quando creare un pacchetto nuget o creare un API web

4

Poiché i nostri sviluppatori stanno scrivendo applicazioni interne, spesso abbiamo bisogno di condividere il codice. Ci sono vari modi per farlo, ma di solito si tratta di creare un pacchetto nuget su un server condiviso o di ospitare internamente una API web. Non abbiamo un modo definitivo per decidere tra i 2 e al momento abbiamo una combinazione di entrambi. Qualche suggerimento / guida su quando fare uno sopra l'altro?

Per essere un po 'più specifici ... Dì che ho alcuni metodi di uso generale per FormatXXX (), CalculateXXX (), SendXXX (), ecc ... di cui molte app potrebbero trarre beneficio. Dovrebbe essere una web api interna o un pacchetto nuget?

Siamo un negozio .Net e usiamo VS 2017, TFS (con git). Per lo più realizziamo app web, web api, servizi wcf e app a linea di comando. Interfacciamo con le API di terze parti tutto il tempo.

    
posta goku_da_master 18.01.2018 - 20:51
fonte

3 risposte

1

Se è una funzione pura, vuoi che il codice venga eseguito sulla stessa CPU dell'app. un pacchetto nuget è un buon modo per ottenere quel codice nel tuo progetto.

Se la funzione ha effetti collaterali che vuoi essere globale. cioè ogni volta che viene eseguita questa funzione, DEVE generare un registro di controllo. oppure, questa funzione deve avere una sola istanza in esecuzione alla volta e fermarsi quando raggiungiamo 1000 chiamate al giorno! O più comunemente, questa funzione accede a un database comune e dobbiamo smettere di eliminarlo. Quindi è necessario controllare il modo in cui la funzione viene utilizzata e deve ospitarla autonomamente. Esporre solo un'API per consentire ai consumatori di chiamare.

Il lato negativo di un'API ospitata è che devi ospitare il server, probabilmente un cluster in fail-over, quindi c'è un costo. Inoltre, l'invio della chiamata tramite la rete è lento.

Una nota sulle soluzioni di codice condivise:

È stato suggerito di utilizzare codice condiviso anziché pacchetti NuGet per progetti interni.

Sebbene questa sia una soluzione, il rovescio della medaglia è che ogni applicazione che usa il codice costruirà la propria versione del pacchetto. Quindi perdi i vantaggi del controllo delle versioni, della firma, di più build di piattaforme ecc. Che puoi ottenere da nuget o da altri gestori di pacchetti.

Suggerirei il suo meglio per trattare i tuoi "clienti" interni come quelli esterni e farli estrarre tutti i pacchetti, interni ed esterni da nuget.

    
risposta data 18.01.2018 - 21:19
fonte
2

Utilizza NuGet quando il progetto, la libreria o il framework devono essere distribuiti pubblicamente agli sviluppatori di software al di fuori della tua organizzazione. *

Utilizza un'API web quando ti servono i vantaggi offerti da un'API Web. In generale, ciò significa che ci sono più front-end software che devono comunicare con funzionalità server di qualche tipo.

In tutti gli altri casi, metti il progetto condiviso nel controllo del codice sorgente e consenti agli sviluppatori di includerlo nelle proprie soluzioni.

* Se disponi di un robusto programma di integrazione continua, puoi provare a creare pacchetti NuGet e utilizzarli internamente. Lo abbiamo fatto per un po 'con risultati decisamente contrastanti. Fare in modo che le cose costruissero correttamente era un problema costante. Hai bisogno di elementi di configurazione per farlo correttamente con NuGet, a mio parere.

Ulteriori letture
Git Submodules

    
risposta data 18.01.2018 - 21:19
fonte
0

Preferisci un servizio se hai bisogno del pieno controllo dell'esecuzione o di alcune risorse centralizzate (database, server di posta, ecc.). Favorisci la condivisione della tua fonte quando le risorse non sono condivise, quando è necessaria una latenza ultra bassa o quando la capacità di promettere l'uptime / fornire supporto è limitata.

Ad ogni modo, non personalmente userò un pacchetto NuGet per condividere il codice internamente. Condividerei il mio repository e lancio una DLL su un wiki (o su un'unità condivisa o altro) - per i consumatori che non vogliono ricompilare continuamente il mio codice.

    
risposta data 19.01.2018 - 17:35
fonte

Leggi altre domande sui tag