Utilizzo di una proprietà pubblica e di un campo pubblico

8

Dove lavoro, usare Proprietà è scoraggiato. Abbiamo strumenti di generazione del codice per "accelerare le cose". Tutti i dati dell'oggetto diventano campi pubblici. Se richiedi comunque proprietà, ottieni qualcosa di simile a questo:

Public sFoo as String

Public Property Foo as String
  Get
    Return sFoo
  End Get
  Set(ByVal value as String)
    sFoo = value
  End Set
End Property

Non riesco a pensare a un argomento ragionevole per farlo. Ci sono dei buoni motivi per usare sia una proprietà pubblica che un campo pubblico?

    
posta Daniel 19.08.2013 - 23:14
fonte

3 risposte

28

Non ci sono.

Non c'è una buona ragione per questo. E:

  1. Confonde gli altri programmatori facendo qualcosa che non ha senso,
  2. Espone inutilmente le interiora della tua classe,
  3. Fornisce due punti di ingresso per la stessa cosa,
  4. ??

Utilizza invece Proprietà auto-implementate .

    
risposta data 19.08.2013 - 23:23
fonte
2

Uno dei principi fundemental object oriented è chiamato Encapsulation. Dice che ogni oggetto dovrebbe proteggere i suoi dati da modifiche esterne.

Questo è fatto rendendo tutti i campi privati e se possibile anche rendere privati tutti i setter di proprietà. Invece devi introdurre un comportamento aggiungendo metodi che sono usati per modificare lo stato.

Quello che stai facendo è molto sbagliato. In sostanza è solo la programmazione funzionale in cui tutte le classi sono solo contenitori di dati o un modo di raggruppare i metodi insieme. Il primo è un modello anti chiamato Modello di dominio anemico .

Il problema è che la logica di business per ogni modello di dominio è distribuita su più punti della tua applicazione (cioè ogni luogo in cui l'oggetto viene modificato). Quindi è difficile trovare bug relativi alle regole della tua attività in quanto devi analizzare ogni luogo in cui viene utilizzato l'oggetto, invece di analizzare semplicemente l'oggetto stesso.

Ne ho parlato qui: link

    
risposta data 20.08.2013 - 11:30
fonte
1

Are there any good reasons to use both a Public Property with a Public Field?

In breve: No , non ci sono giustificazioni per questo. Le proprietà pubbliche hanno più usi commerciali dei campi pubblici.

Alcuni dei molti usi delle proprietà sono:

  • Le proprietà possono convalidare i dati prima di consentire una modifica
  • Può esporre in modo trasparente i dati su una classe in cui tali dati vengono effettivamente recuperati da un'altra fonte, come un database
  • Può intraprendere un'azione quando i dati vengono modificati, come aumentare un evento o modificare il valore di altri campi

Come già suggerito, l'uso delle proprietà automatiche è un altro modo intelligente per andare avanti.

Maggiori dettagli in MSDN - Proprietà VB.NET

    
risposta data 20.08.2013 - 05:08
fonte

Leggi altre domande sui tag