Sto progettando una libreria di classi riutilizzabile che contiene 2 assembly (tra gli altri) denominati core.xml.dll e core.string.dll.Dipendenze circolari rispetto a DRY
L'assembly xml fa riferimento all'assembly di stringhe per utilizzare alcuni metodi di stringa helper.
Tuttavia ora esiste un metodo di stringa che potrebbe trarre vantaggio dall'utilizzo di un metodo contenuto nell'assembly xml.
Se faccio riferimento all'assembly xml dall'assieme di stringhe, avrò creato una dipendenza circolare e non sarà possibile creare entrambi gli assembly dal codice sorgente. (cioè il problema del pollo e dell'uovo).
Per seguire il principio "Non ripetere se stessi", vorrei evitare di duplicare la funzionalità in entrambi gli assiemi. Se trovo un bug nell'implementazione, voglio solo sistemarlo in un posto.
Mentre potevo unire i gruppi in uno, questo non è l'ideale in quanto riduce la coesione dell'assieme.
Avrei bisogno di ricostruire e ridistribuire l'intero assieme solo per una piccola modifica a una classe specifica. Inoltre, alla fine, con così tante dipendenze probabilmente finirei con un enorme assemblaggio di librerie.
Quindi, nel contesto di un insieme riutilizzabile di gruppi di librerie qual è l'approccio migliore da utilizzare qui? Inoltre, in che modo lo stesso framework .NET si occupa di questo problema?
(riflettore sembra che fa riferimento a System.Configuration.dll System.xml.dll e viceversa. E 'questo in realtà corretta, se sì, come viene gestita la dipendenza circolare?)
Puoi fornire un esempio concreto di come un metodo "... stringa che trarrebbe vantaggio dall'utilizzo di un metodo contenuto nell'assembly xml." –
Stavo guardando un metodo di conversione che accetta XML e converte in un formato basato su stringhe Sì, sto pensando che questo potrebbe essere gestito in modo diverso in qualche modo, tuttavia sono ancora interessato alla domanda più generale – Ash
il libro di John Lakos, "Progettazione di software C++ su larga scala". Un sacco di quel materiale potrebbe essere inapplicabile a C#, ma approfondisce l'architettura livellata, che è esattamente quello che sta facendo la tua domanda. – Tom