Deve mettere l'Interfaccia?

giovedì 30 ottobre 2008 - 12.26

Teech Profilo | Expert

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

rossimarko Profilo | Guru

Ciao,

di solito le interfacce le implemento in un assembly a parte dove racchiudo tutti gli oggetti comuni. Questo perchè l'interfaccia è slegata dalla relative implementazioni e ti consente di avere più flessibilità se viene implementata in un assembly comune.

Un piccolo esempio
- assembly common (con le interfacce e le librerie comuni)
- progetto A che carica i dati ed implementa un'interfaccia
- progetto B che utilizza le classi del progetto A sfruttando le interfacce.

Ovviamente sia A che B avranno una reference al common ma questo ti consente di implementare un'altra versione del progetto A distribuendo solo la libreria common.


-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

Teech Profilo | Expert

Tutto il "maccherone" di riportare il Datatable tipizzato verso una collection l'ho fatto proprio per poter riutilizzare un domani la collection con strutture diverse e il fatto di creare un progetto con interfacce e librerie comuni mi sa che è proprio la strada più corretta.
La domanda era forse banale, ma sono ancora nella fase in cui cerco di capire come strutturare al meglio gli assembly ed i progetti per avere una buona "portabilità" delle classi che costruisco su altri progetti futuri.

Grazie mille!!!
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5