Un buon esempio (?) di property WriteOnly

Ho sempre trovato difficile, parlando, spiegare in quali casi potrebbe essere utile avere una property WriteOnly.

Oggi ho trovato questo caso, che di te...calza?

Ho uno UserControl che lavora con una classe del mio Object Model, gliela si setta come property, lui la visualizza e la gestisce e alla fine la si può anche leggere (così se l'utente l'ha cambiata, possiamo sempre ottenderla).

Il fatto è che questa classe è implementata come property in un'altra classe sempre del mio OM.

Esempio:

Classe Città

Properties Nome, Provincia

Classe Abitante

Properties Nome, Cognome, Città (di tipo Città)

Immaginate che lo UserControl gestisca un oggetto di tipo Città tramite la property Dato.

Questa property l'ho implementata WriteOnly perchè voglio evitare che venga usata per farne una Get.

Per riottenere l'oggetto Città modificato dallo UserControl voglio che si utilizzi il metodo Merge che, dato un oggetto Abitante, ne restituisce uno con solo la sua property Città aggiornata. 

In questo modo per settarla:

usercontrolCittà.Città = objAbitante.Città;

Per rileggerla (riassegnarla):

objAbitante = usercontrolCittà.Merge(objAbitante);

Così, se dovessi avere altri UserControl che gestiscono altre subclassi del mio OM non mi devo preoccupare che "si pestino i piedi" ma userò il metodo Merge di ogni UserControl, che varierà solo i dati che lui gestisce (in questo caso la classe Città).

Lo so che vi ho annoiato e avrete già cambiato blog, ma volevo sapere cosa ne pensate...

Print | posted on martedì 2 ottobre 2007 14.44

Feedback

# Re: Un buon esempio (?) di property WriteOnly

Left by Michele Bersani at 02/10/2007 14.58
Gravatar FxCop si arrabbia abbastanza se gli metti le proprieta' a WriteOnly ;)

# re: Un buon esempio (?) di property WriteOnly

Left by Omar Damiani at 02/10/2007 15.08
Gravatar Beh...almeno sbagliando s'impara :)
Thanks per la segnalazione.

# Re: Un buon esempio (?) di property WriteOnly

Left by Igor Damiani at 03/10/2007 8.40
Gravatar non sono riuscito a capire fino in fondo la questione. Tieni presente però che puoi comunque mettere la get, che però internamente esegue la Merge che vuoi eseguire tu.

# re: Un buon esempio (?) di property WriteOnly

Left by Omar Damiani at 03/10/2007 9.28
Gravatar Questa risposta mi fa pensare che il fatto che ho ricevuto pochi commenti sia dovuto al fatto che mi sia spiegato male...

Beh, in effetti non era facile spiegarlo...

# re: Un buon esempio (?) di property WriteOnly

Left by raffaeu at 07/10/2007 14.11
Gravatar Prima correzzione 'questa proprieté l' ho impostata writeonly per non consentire il get' al massimo il set ...
Inoltre non reisco a capire una cosa, il metodo merge non usa comunque il set della proprietà per impostarne il nuovo valore?
Infine perchè hai questa esigenza di non poter impostare come solito fare, nel costruttore, il valore della property?

# re: Un buon esempio (?) di property WriteOnly

Left by Omar Damiani at 07/10/2007 16.00
Gravatar x Raffaeu:
1. No, con Writeonly è proprio la Get che non si può fare...

2. No, non usa il metodo set (che non c'è nemmeno), inoltre alla Merge si passa l'oggetto parent (e non l'oggetto classe direttamente), questo proprio per avere l'effetto che se ho una serie di UserControl, ognuno che modifica una certa proprietà della classe Abitante, è la Merge che pensa a modificare la giusta proprietà.

3. A dire il vero non so se si può fare, voglio dire la classe che ha questa property Writeonly è uno UserControl, non so se posso "controllarne" il costruttore (e se valga la pena), inoltre è un valore che non posso passare subito alla creazione della pagina aspx (che crea anche lo UserControl)...

Comunque alla fine forse è davvero un po' complicato parlarne su un blog...occorre un bel po' di codice davanti :)

# re: Un buon esempio (?) di property WriteOnly

Left by Raffaeu at 08/10/2007 12.41
Gravatar Ops la solita figura di m postando a 'caldo'.
Comunque interessante argomento da come la descrivi deduco quindi che vuoi una property readonly ma impostarne il valore a runtime? Ma sintatticamente è ancora readonly? ;-)

# re: Un buon esempio (?) di property WriteOnly

Left by Omar Damiani at 08/10/2007 14.02
Gravatar No no...non è readonly...è proprio writeonly.

Da fuori (pagina che contiene lo UserControl) setto la proprietà Città direttamente.
Però non è altrettanto leggibile direttamente.
Siccome lo UserControl (o per meglio dire l'utente che usa l'UC) esegue delle modifiche alla proprietà Città, per "rileggere" i valori occorre richiamare una Merge passandogli però l'oggetto parent (Abitante).

E' questo il nerbo della questione.;)

Your comment:





 
Please add 4 and 5 and type the answer here:

Copyright © Omar Damiani

Design by Bartosz Brzezinski

Design by Phil Haack Based On A Design By Bartosz Brzezinski