Riferimenti circolari

giovedì 15 gennaio 2009 - 15.07

Teech Profilo | Expert

Stò creando un applicativo con una serie di progetti.
Per ogni entità logica del mio applicativo ho operato come segue:
- Ho creato un progetto contenente le interfacce
- Ho creato un progetto per recuperare i dati da un DB
- Ho creato un progetto per gestire le classi "reali" che uso nell'applicativo
Ad esempio, per gestire l'entità Cliente ho:
- un progetto Common.Clienti dove ho inserito tutte le interfacce (per IClienteDB per i dati che derivano dal DB, ICliente per le classi che utilizzerò nell'applicativo lato utente, IClienti per gestire una collection di ICliente, ecc...)
- un progetto Database.Clienti dove ho le classi per gestire i dati derivanti dal DB (una classe implementa, ad esempio, IClienteDB)
- un progetto Clienti dove ho le classi che uso per gestire i dati lato utente (una classe implementa ICliente -usa un oggetto IClienteDB nel costruttore- ed un'altra IClienti ad esempio)
Stesso discorso vale per un'entità Commesse e tutte le altre entità coinvolte nel programma.

Il problema è che nell'interfaccia ICliente vorrei implementare una Property di questo tipo
Property Commesse() As BindingList(Of ICommessa)
in quanto ogni Cliente può avere più Commesse
e nell'interfaccia ICommessa vorrei implementare una Property di questo tipo
Property Cliente() As ICliente
in quanto ogni Commessa è associata ad un Cliente

Per fare ciò nel progetto Common.Clienti devo referenziare il progetto Common.Commesse e allo stesso tempo nel progetto Common.Commesse devo referenziare il progetto Common.Clienti. Questo è impossibile in quanto creo un riferimento circolare che giustamente Visual Studio non mi permette di effettuare. Ora, considerando che vorrei mantenere progetti separati per entità separate (questione di riusabilità di codice) come posso comportarmi?
Attualmente non ho inserito la property Commesse nell'interfaccia ICliente e la gestisco direttamente nel progetto Clienti... Avete soluzioni più eleganti? Vi sembra che concettualmente ci sia qualcosa di errato nella mia struttura a livello logico?

Grazie!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole

Jeremy Profilo | Guru

Il discorso è un pò complesso da affrontare tramite dei post....bisognerebbe conoscere bene tutta la struttura.
Quello che ti posso consigliare(per esperienza personale recentemente fatta) è di prendere in considerazione il fatto di creare una Libreria di Classi il quale contiene delle classi.... le quali successivamente possono essere ereditate in un altra libreria di classi più completa.
Come ti dicevo è un pò difficile da spiegare....comunque io ho risolto....creando delle classi...diciamo...base....le quali poi, sono state ereditate da classi più specifiche per lo scopo al quale erano destinate.

Spero di esserti stato,in qualche modo, di aiuto.
ciao.


Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5