Confronto tra due classi di oggetti

martedì 09 ottobre 2012 - 10.36
Tag Elenco Tags  C#  |  VB.NET

anfiteatro Profilo | Newbie

Ciao a tutti,
ho necessità di confrontare se due classi sono diverse ed ovviamente evidenziare le proprietà che differiscono.
Ad esempio, semplificando:
Public Class Persona
Private Nome as String
Private Cognome as String
Provate NumTel as List(Of Recapiti)
...

Public Class Recapiti
Private Tipo as String
Private Num as String
....

Supponiamo di avere due classi Persona istanziate e volessi verificare si tratti della stessa Persona (ovviamente confrontando i dati e non l'Hash della classe) e nel caso evidenziare dove si presentano le differenze. Come dovrei fare?
Tenete conto che non volevo creare da zero una Routine che facesse il controllo, in quanto le tipologie di classi da confrontare sono molte.

Vi spiego il mio intento...

Nel mio modo di sviluppare non considero (e sicuramente sbaglio) l'utilizzo di automatizzazioni intrinseche del Framework, ma preferisco avere il totale controllo dei miei oggetti.

Premesso ciò, sviluppo tutto il mio oggetto dalla BL alla DAL con i metodi opportuni. E vorrei implementare una funzione che il Framework già contempla, ovvero (in una Concorrenza Ottimistica) non loccando i Record del DB vorrei che al momento della scrittura di aggiornamento dell'oggetto sul DB, controllare se, rispetto a quando abbiamo "caricaro in update" un oggetto, questi sia cambiato o meno rispetto al DB.

Spero di essermi spiegato.
E ovviamente come potrete capire, gli oggetti sono dei più disparati e implementando un Metodo di comparazione sarebbe troppo dispendioso.

Attendo i Vostri preziosi consigli. Grazie

alx_81 Profilo | Guru

>Ciao a tutti,
ciao

>Supponiamo di avere due classi Persona istanziate e volessi verificare
>si tratti della stessa Persona (ovviamente confrontando i dati
>e non l'Hash della classe) e nel caso evidenziare dove si presentano
>le differenze. Come dovrei fare?
per comparare i dati delle due classi secondo me devi overridare la IEquatable:
http://msdn.microsoft.com/en-us/library/ms131187.aspx
http://www.codeproject.com/Articles/20592/Implementing-IEquatable-Properly

>Premesso ciò, sviluppo tutto il mio oggetto dalla BL alla DAL
>con i metodi opportuni. E vorrei implementare una funzione che
>il Framework già contempla, ovvero (in una Concorrenza Ottimistica)
>non loccando i Record del DB vorrei che al momento della scrittura
>di aggiornamento dell'oggetto sul DB, controllare se, rispetto
>a quando abbiamo "caricaro in update" un oggetto, questi sia
>cambiato o meno rispetto al DB.
Per la concorrenza potresti usare anche una logica di timestamp:
1) carico dal db il timestamp di ultima modifica di un record
2) faccio le elaborazioni sull'applicazione
3) quando vado a salvare passo il timestamp che avevo letto
4) su db, se il timestamp è differente, allora qualcuno ha già scritto la modifica, e gestisco il caso

>Spero di essermi spiegato.
>E ovviamente come potrete capire, gli oggetti sono dei più disparati
>e implementando un Metodo di comparazione sarebbe troppo dispendioso.
A me viene solo l'implementazione dell'interfaccia, con cui, per ogni oggetto puoi definire il criterio per l'Equals
Se vuoi puoi anche implementare la IComparable, per il CompareTo.

>Attendo i Vostri preziosi consigli. Grazie
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5