Salve a tutti!!! Ho un problema di logica di programmazione che non mi fa dormire alla notte
. (VB2005 per la precisione)
Ho una classe che connettendosi ad un Database mi restituisce (attraverso una funzione) un DataTable ovviamente collegato ad un DataAdapter (per il quale ho scritto i vari Command in mdo che rispecchi le mie esigenze). Questo DataTable contiene un elenco di Clienti con tutti i suoi dati (Codice, Ragione Sociale, Indirizzo, ecc..): i dati sono tanti.
Ho una classe Cliente dove espongo i vari campi del DataTable come proprietà "tipizzando". Per fare ciò ho inserito una classe Collection (chiamata 'Clienti') che al suo interno recupera il DataTable e iterando i DataRow contenuti istanzia una classe Cliente alla volta attraverso il seguente codice:
Private Sub Popola()
Dim dt as DataTable = DataBase.GetClienti()
For Each dr As DataRow In dt.Rows
Dim c As New Cliente(dr)
Me.List.Add(c)
Next
End Sub
La classe Cliente prende il DataRow e ne associa i campi alle proprietà come di seguito riportato:
Public Class Cliente
Private _dr As DataRow
Sub New(ByVal dr As DataRow)
_dr = dr
End Sub
Public ReadOnly Property Codice() As String
Get
Return _dr("Codice").ToString.Trim
End Get
End Property
Public ReadOnly Property RagioneSociale() As String
Get
Return _dr("RagioneSociale").ToString.Trim
End Get
End Property
....
End Class
In questo modo, facendo la Update del DataAdapter, avendo assegnato dei valori alle variabili della classe Cliente tutto funziona tranquillamente.. Però non mi piace per niente la Sub New della classe Cliente: in questo modo la classe potrebbe "prendere in pasto" anche un DataRow di Articoli piuttosto che un DataRow di Clienti con caratteristiche errate.
Finalmente la domanda:
Che oggetto posso passare alla classe Cliente in modo che sia a tipizzazione forte e mantenendo il "collegamento" al DataAdapter? O meglio, come posso tipizzare il DataRow per non perdere il "collegamento" al DataAdapter?
Come potete notare alcune proprietà della classe Cliente sono ReadOnly ma altre devo poterle aggiornare sul database quindi devo necessariamente passare un oggetto quando istanzio la classe per poter valorizzare le variabili per le proprietà ReadOnly.
Spero di essere stato chiaro nell'esposizione di questo problema... Grazie della pazienza
--------------
Maurizio Brini
--------------
Nessuna impresa è mai stata compiuta da un uomo ragionevole