Ciao a tutti.
Il mio "problema" è puramente di forma e vorrei capire come è meglio agire.
Ho un assembly (ClientiDB) che altro non è che un DataTable tipizzato che gestisce la connessione al DB e attraverso una logica di business legge, scrive, aggiorna e cancella i dati dal DB. Questo DataTable mi restituisce dei DataRow tipizzati (ClienteDB).
In un altro progetto della stessa solution ho un assembly (Clienti) dove per ogni ClienteDB creo un'istanza di un cliente come classe e lo gestisco attraverso una Collection: dalla collection richiamo dei metodi del DataTable che mi restituiscono i clienti e per ogni ClienteDB istanzio un Cliente.
La routine per popolare la collection è la seguente:
Private Sub Popola()
Dim ac As New AdapterClienti
For Each cl As ClienteDB In ac.GetClienti
Dim c As Cliente = Cliente.CreateInstance(CType(cl, DB.ClienteDB))
Me.List.Add(c)
Next
End Sub
Ora, vorrei aggiungere una interfaccia per ClienteDB e passare alla classe Cliente un'interfaccia in questo modo (uso un metodo statico e un costrutture privato all'interno della classe):
Public Shared Function CreateInstance(ByVal cl As IClienteDB) As Cliente
Return New Cliente(cl)
End Function
Ora finalmente la domanda: dove è meglio mettere l'interfaccia?
1. Nell'assembly dove è presente la classe che implementa l'interfaccia
2. Nell'assembly dove è presente la classe che usa l'interfaccia
3. In un nuovo assembly (ma di quale progetto della solution?)
Secondo me la prima opzione è la più logica ma poi, essendo la classe che "usa" l'interfaccia in un altro progetto perdo in "riusablità" del progetto stesso... Per contro, nelle altre opzioni mi ritrovo con il problema inverso...
Voi come fareste/fate in questi casi?
Nella logica dei contratti (l'Interfaccia è un contratto no?) ne ha una copia il cliente ed una il fornitore identica
Grazie!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole