Organizzazione del codice per minimizzare la ripetizione e riferimenti esterni

3

Ho difficoltà a organizzare i riferimenti esterni in un programma C # per ridurre al minimo la ripetizione del codice.

Ho un'applicazione "A1" per la quale voglio usare il sistema Unity IoC / Dependency Injection di Microsoft. Quindi uso NuGet per tirare giù il pacchetto Unity e installarlo in A1. Questo tira giù 2 progetti e 4 DLL nel progetto di A1.

Per facilitare l'uso di Unity, incapsulare l'oggetto contenitore in un pattern Singleton (S1). Quindi ho una casa costante / coerente per il container e non importa dove in A1 ho un facile accesso.

Ma voglio usare Unity anche in una diversa e indipendente applicazione A2. Questa altra applicazione non è nella stessa soluzione di A1. Quindi avrebbe senso spostare il mio codice S1 in una terza soluzione che costruisce una DLL esterna (D1) a cui è possibile fare riferimento sia A1 che A2. In questo modo non scrivo continuamente il codice S1 in ogni applicazione. Ho ottenuto il riutilizzo del codice!

Tuttavia, per fare ciò ora ho bisogno di usare NuGet per inserire riferimenti a Unity in ciascuno dei progetti / soluzioni A1, A2 e D1. E a causa di ciò, le versioni di Unity nell'applicazione e nella DLL sono totalmente indipendenti. Sto iniziando a sentirmi l'epitome del vecchio scherzo Regex:

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.

Non riesco a vedere un modo pulito per organizzare tutto questo. Le uniche opzioni che vedo sono:

  1. Duplica manualmente il codice S1 in ogni applicazione (e lascialo fuori dalla DLL) e usa NuGet per abilitare Unity in quelle applicazioni.

  2. Spostare il codice S1 nella DLL, ma fare riferimento a NuGet in versioni totalmente indipendenti di Unity nelle applicazioni A1 e A2 e nelle soluzioni DLL D1.

  3. Spostare il mio codice S1 nella DLL D1 e disporre di Unity di riferimento NuGet solo in quella soluzione. Quindi in ogni applicazione aggiungi non solo la mia DLL D1 personalizzata dalla soluzione DLL, ma anche manualmente aggiungi le 4 Unity DLL che sono state aggiunte alla mia soluzione D1.

Tutte e 3 queste opzioni hanno una sorta di odore di codice. Attualmente mi sto appoggiando all'opzione 1 come l'opzione meno peggio di quelle 3. C'è una quarta opzione che fornisce la flessibilità che voglio ma elimina questi odori di codice?

So che il codice singleton è solo un file molto piccolo, ma è il principio di questo dilemma che mi sta uccidendo. Anche il mio progetto D1 ha un sacco di altri codici comuni e non solo il codice S1.

    
posta Peter M 08.05.2017 - 13:47
fonte

1 risposta

1

Crea un nuovo pacchetto nuget per S1 con una dipendenza dal pacchetto Unity.

Puoi quindi utilizzare questo pacchetto nuget per le tue applicazioni e importerà automaticamente Unity come dipendenza

    
risposta data 08.05.2017 - 14:46
fonte

Leggi altre domande sui tag