Okey dokey, il prossimo crappy-code-at-work-rant-diventa-in-a-real-question (spero):
Quindi sto eseguendo il debug di alcuni codici e abbiamo qualcosa di simile:
objFoo.TabIndex = 5 'VB.NET property with setter implicitly called
e TabIndex è una proprietà il cui setter è l'inizio di un albero di chiamata insano , con subroutine e XML e casi speciali a seconda del contesto (come: modalità) e così via.
(Gack. Puoi vedere cosa mi sta facendo lavorare qui. Ho appena aggiunto a Foo "obj". :()
Ok, garantito, dobbiamo gestire lo stato ed eseguire calcoli e quant'altro. Il nostro stato è nel database (ma potrebbe essere costoso da estrarre) o non è ancora pronto per essere impegnato nel database (ad esempio, è solo parzialmente cotto), quindi non possiamo limitarci a esaurire il d / b ogni volta che abbiamo bisogno di informazioni, ma ...
È meglio gestire questo stato nei setter o è meglio farlo nei getter?
Penserei che farlo in getters (cioè, pigramente) significherebbe che calcoleremmo (e, presumibilmente, cache) solo ciò di cui abbiamo bisogno, mentre lo facciamo in setter significa che stiamo essenzialmente superando il calcolo, anticipando ciò che i getters possono essere chiamati in futuro e precomputeranno i loro risultati. (E poi, ci sono i membri dei dati che non hanno getter, sono solo variabili globali in una classe di 6.000 righe.)
Non dovremmo semplicemente, come regola generale, impostare il membro dei dati indicato, magari impostare dei flag che indicano che altri dati non sono più validi (invalidazione della cache) e aspettare che i vari getter vengano chiamati a ricalcolare?
Posso immaginare che un argomento per fare questo nei setter è che il nostro oggetto è così complesso che abbiamo davvero bisogno di configurare correttamente il suo stato, usando più membri di dati complessi. Ma non è una bandiera rossa in sé, indicando che un approccio migliore sarebbe quello di rompere l'oggetto in oggetti più piccoli, non scrivere un setter complesso?
(Ora, so che ci sono eccezioni di ogni genere che la gente senza dubbio sottolinea, ma sto cercando una regola empirica generale e la logica alla base, o l'affermazione che non esiste una tale regola generale possibile, accompagnato da un argomento convincente.)
Grazie.
John.