La risposta che menziona le interfacce è corretta, ma se è necessario essere in grado di creare entrambi i tipi da entrambi i progetti, sarà necessario creare una factory in un altro progetto (che farebbe riferimento anche al progetto delle interfacce, ma potrebbe essere referenziato da entrambi i tuoi progetti principali) o cambiare la struttura che stai utilizzando in modo significativo.
Qualcosa del genere dovrebbe funzionare:
Finance: References Billing, Interfaces, Factory
Billing: References Finance, Interfaces, Factory
Factory: References Interfaces
fabbrica avrebbe un BillingFactory.CreateInstance() As Interfaces.IBilling
e anche la classe di fatturazione astratta che implementa Interfaces.IBilling.
L'unico problema che posso vedere è se devi fare qualcosa di intelligente quando instanzia un oggetto e non vuoi che quella logica finisca in un progetto separato - ma come non hai menzionato nessuna logica intelligente per istanziare, questo dovrebbe essere sufficiente
Mentre è possibile utilizzare diversi trucchi già menzionati, questo sembra un problema architettonico. Come si fa una distinzione tra fatturazione e finanziaria? Trovo un po 'difficile tracciare una battuta qui, e il mio sentimento è "Finanziario" non dovrebbe mai riferirsi alla fatturazione, perché è molto meno astratto. È possibile che alcuni oggetti risiedano nel progetto sbagliato? Che cosa è esattamente "troppo grande"? – mnemosyn
Questo è solo un esempio. L'intenzione è sapere come creare un ERP seguendo le buone pratiche OOP poiché i riferimenti circolari sono molto comuni su quel tipo di software perché è molto grande e suddiviso in molti moduli. – Eduardo
I riferimenti circolari provengono da un design imperfetto non dalla complessità del dominio. Nessun gioco di parole, non sto dicendo che questa è la situazione qui. Gli ERP non sono qualcosa che puoi sviluppare mentre scendi lungo il percorso, devi avere un'immagine molto chiara di ciò che stai cercando di realizzare molto prima di scrivere una singola riga di codice. – devnull