
Αναρωτιέμαι αν είναι καλή ιδέα να κάνουν **ελέγχους** στα **getters** και **setters** , ή σε άλλα σημεία του κώδικα.


Αυτό μπορεί να σας εκπλήξει είναι όταν πρόκειται για **βελτιώσεις** και **την επιτάχυνση** του κώδικα, νομίζω ότι δεν πρέπει να κάνουν ελέγχους στα getters και setters, αλλά στον κώδικα όπου είστε **ενημέρωση** αρχείων ή βάσης δεδομένων σας. Κάνω λάθος?

 
επαληθεύσεις δεδομένων στο κτητόρων / Σέττερ ή αλλού;
=====================================================



Λοιπόν, ένα από τα reaons γιατί τάξεις περιλαμβάνουν συνήθως ιδιωτικού μέλη με τις δημόσιες κτήτορες / setters είναι ακριβώς επειδή μπορεί να ελέγξει τα δεδομένα.


Αν έχετε έναν αριθμό από ό, τι μπορεί να είναι μεταξύ 1 και 100, θα έβαζα σίγουρα κάτι το setter που επικυρώνει ότι και τότε ίσως να ρίξει μια εξαίρεση που έχει αλιευθεί από τον κώδικα. Ο λόγος είναι απλός: Αν δεν το κάνουμε στο ρυθμιστή, θα πρέπει να θυμόμαστε ότι 1 έως 100 περιορισμό κάθε φορά που το ρυθμίσετε, η οποία οδηγεί σε διπλές κώδικα ή όταν το ξεχνάμε, οδηγεί σε μια μη έγκυρη κατάσταση.


Όσο για τις επιδόσεις, είμαι με εδώ Knuth:



> 
> «Πρέπει να ξεχάσουμε τις μικρές αποδόσεις, δηλαδή περίπου το 97% του χρόνου. Πρόωρο βελτιστοποίησης είναι η ρίζα όλων των κακών»
> 
> 
> 

 

Η επικύρωση πρέπει να συλληφθούν ξεχωριστά από getters ή setters σε μια μέθοδο επικύρωσης. Με αυτόν τον τρόπο, εάν η επικύρωση πρέπει να επαναχρησιμοποιηθούν σε πολλές συνιστώσες, που είναι διαθέσιμη.


Όταν ο ρυθμιστής ονομάζεται, μια τέτοια υπηρεσία επικύρωσης πρέπει να χρησιμοποιηθούν για να αποστειρώνουν είσοδο στο αντικείμενο. Με αυτόν τον τρόπο θα ξέρετε όλες τις πληροφορίες που είναι αποθηκευμένες σε ένα αντικείμενο ισχύει ανά πάσα στιγμή.


Δεν χρειάζεται κανενός είδους επικύρωση για συλλέκτη, επειδή οι πληροφορίες σχετικά με το αντικείμενο ήδη εμπιστευθούν για να είναι έγκυρη.


Μην αποθηκεύετε την επικύρωση σας μέχρι την ενημέρωση της βάσης δεδομένων !! Είναι καλύτερα να **αποτύχουν γρήγορα** .

 

Από την πλευρά του έχει την πιο διατηρήσιμη κώδικα, νομίζω ότι πρέπει να κάνουμε ό, επικύρωση, όπως μπορείτε στο ρυθμιστή ενός ακινήτου. Με αυτό τον τρόπο δεν θα την προσωρινή αποθήκευση ή με άλλο τρόπο ασχολούνται με μη έγκυρα δεδομένα.


Μετά από όλα, αυτό είναι ό, τι ακίνητα προορίζονται για. Αν το μόνο που έχετε είναι ένα μάτσο ιδιότητες όπως ...



```
public string Name
{
    get
    {
        return _name;
    }
    set
    {
        _name = value;
    }
}

```

... που θα μπορούσε κάλλιστα να είναι πεδία

 

Εξαρτάται.


Σε γενικές γραμμές, ο κωδικός θα πρέπει να αποτύχουν γρήγορα. Εάν η τιμή μπορεί να οριστεί από πολλαπλά σημεία στον κώδικα και θα επικυρώσει μόνο μετά την ανάκτηση της αξίας, το σφάλμα φαίνεται να είναι στον κώδικα που κάνει την ενημέρωση. Αν οι ρυθμιστές επικύρωση της εισόδου, ξέρετε τι κωδικό προσπαθεί να ορίσετε μη έγκυρες τιμές.

 

Μπορεί να θέλετε να ελέγξετε έξω [Τομέα Driven Σχεδιασμού](http://books.google.com/books?id=7dlaMs0SECsC) , από τον Eric Evans. DDD έχει αυτή την έννοια της Προδιαγραφή:



> 
> ... ρητά κατηγόρημα-όπως ΑΞΙΑ ΑΝΤΙΚΕΙΜΕΝΑ για ειδικούς σκοπούς. Μια προδιαγραφή είναι ένα κατηγόρημα που καθορίζει αν ένα αντικείμενο έχει ή δεν πληροί κάποια κριτήρια.
> 
> 
> 


Νομίζω ότι ελλείψει γρήγορη είναι ένα πράγμα, το άλλο είναι πού να διατηρήσει τη λογική για επικύρωση. Η περιοχή είναι το σωστό μέρος για να κρατήσει τη λογική και νομίζω ότι ένα αντικείμενο προδιαγραφή ή μια μέθοδος επικύρωση σε αντικείμενα τομέα σας θα ήταν ένα καλό μέρος.

 

Μου αρέσει να εφαρμόσουν [IDataErrorInfo](http://msdn.microsoft.com/en-us/library/system.componentmodel.idataerrorinfo.aspx) και να θέσει τη λογική επικύρωση μου σε σφάλμα του και αυτό [ColumnName] ιδιότητες. Με αυτόν τον τρόπο, αν θέλετε να ελέγξετε μέσω προγραμματισμού αν υπάρχει κάποιο λάθος, μπορείτε απλά να δοκιμάσετε κάποια από αυτές τις ιδιότητες στον κώδικα, ή μπορείτε να το χέρι την επικύρωση από τις δεσμευτικός ως προς όλα φόρμες Web, τα Windows Forms ή WPF δεδομένων.


ιδιοκτησία WPF του «ValidatesOnDataError» Δεσμευτική κάνει αυτό ιδιαίτερα εύκολη.

 

@Terrapin, εκ νέου:



> 
> Αν το μόνο που έχεις είναι ένα μάτσο ιδιότητες [απλή δημόσια set / πάρετε] ... θα μπορούσε κάλλιστα να είναι πεδία
> 
> 
> 


Ιδιότητες έχουν και άλλα πλεονεκτήματα σε σχέση με τους τομείς. Είναι μια σαφέστερη σύμβαση, είναι σε συνέχειες, που μπορεί να διορθωθεί αργότερα, είναι ένα ωραίο μέρος για επέκταση μέσω της κληρονομικότητας. Η clunkier σύνταξη είναι ένα τυχαίο πολυπλοκότητα - NET 3,5 για παράδειγμα υπερνικά αυτό.


Μια κοινή (και λανθασμένη) πρακτική είναι να ξεκινήσει με το δημόσιο τομέα, και η μετατροπή τους σε ακίνητα αργότερα, σε μια κατ 'επίκληση βάση. Αυτό σπάει το συμβόλαιό σας με όποιον καταναλώνει τάξη σας, γι 'αυτό είναι καλύτερα να ξεκινήσετε με ιδιότητες.

 

Προσπαθώ να μην αφήσουμε τα αντικείμενα μου εισάγετε μια έγκυρη κατάσταση, έτσι setters σίγουρα θα έχουν επικύρωσης, καθώς και τις μεθόδους που αλλάζουν κατάσταση. Με αυτό τον τρόπο, ποτέ δεν χρειάζεται να ανησυχούν ότι το αντικείμενο είμαι ασχολούνται με δεν είναι έγκυρο. Εάν έχετε κρατήσει μεθόδους σας ως τα όρια της επικύρωσης, τότε δεν έχετε να ανησυχείτε για τα πλαίσια επικύρωση και IsValid () μέθοδο κλήσεις σκορπιστεί σε όλη τη χώρα.

 