Esplicito, verbosità e loro controparte - quando preferire quale?

1

Sono l'unico della mia squadra che sostiene di aggiungere un po 'di implicità a favore della riduzione della base di codice e della ripetizione decrescente. Eppure non voglio essere una "mela cattiva" parziale che gioca contro il design del lavoro che è stato creato prima del mio arrivo a questo lavoro. I tentativi di cambiare l'approccio possono essere presi troppo personali da alcuni compagni di squadra e solo dicendo "il mio è meglio del tuo" promette il risultato opposto.

Le prove per scoprire gli svantaggi proposti e i vantaggi della soluzione esistente sono il modo migliore per combattere i pregiudizi, il cosiddetto gioco del "sostenitore del diavolo". Sfortunatamente, a volte è abbastanza difficile.

L'ampia domanda ha il seguente aspetto:

Esistono linee guida chiare (misurabili?) (oltre a "dipende") per impostare il grado di esplicitazione / inderzione.

La domanda ristretta è abbastanza locale, tuttavia ho il coraggio di chiedere l'elenco dei pro e contro di entrambi gli approcci.

La nostra applicazione server ha diversi livelli: servizio, business logic, DAL.
Per qualsiasi modifica dei dati (crea + aggiorna, non cancella), salviamo anche il timbro utente autenticato, quindi rendi la storia che ha fatto cosa.

L'implementazione corrente ottiene il nome utente dal framework MVC / WCF e lo passa attraverso i layer come argomento aggiuntivo ai metodi solo per passare il valore al livello successivo fino a raggiungere l'oggetto sessione che gestisce la transazione. (DAL)

Offro l'uso dell'approccio AmbientContext: Userstamp viene impostato una volta all'inizio della pipeline di elaborazione delle richieste e quindi scorre implicitamente con il flusso di lavoro di esecuzione (rispetto asincrono) ed è accessibile da qualsiasi livello, se necessario. Molto simile a Thread.CurrentPrincipal .

    
posta Pavel Voronin 15.12.2014 - 21:31
fonte

2 risposte

2

Are there any clear (measurable?) guidelines (besides "it depends") for setting the degree of explicitness/inderection.

Non molti.

Il primo è la legge di Demeter , che si concentra sul numero di "passaggi" necessari per arrivare a ciò che voglio, che si riferisce direttamente alla tua domanda su indirezione.

Un altro è Dillo, non Chiedi . Se si dispone di uno stato implicito trasportato in tutto il programma, gli oggetti devono necessariamente chiedere informazioni sullo stato piuttosto che essere informati a riguardo.

Altrimenti, dipende ...

È generalmente accettato che l'esplicitezza è migliore dell'impugnabile. E la tua domanda di esempio fa emergere altre metriche morbide: copertura del codice, numero / gravità degli errori e velocità della squadra.

Se rendi le cose implicite, rendi difficile / impossibile testare il tuo codice unitario, questo è un aspetto abbastanza chiaro.

Se rendi le cose implicite, fai sì che ci siano più bachi o bug più gravi (probabilmente a causa di peggio / meno test unitari? problemi di concorrenza / reentrancy con lo stato implicito?) allora questo è un chiaro svantaggio.

Se rendi le cose implicite, fai in modo che il team produca il codice più lentamente (più difficile scrivere test di unità? più difficile da leggere? più tempo dedicato a correggere i bug?) allora è un lato negativo abbastanza chiaro.

E ovviamente il contrario può essere vero - se implicitness ti permette di fare più codice, con meno bug, allora i positivi sono lì. Come tutti gli altri programmi, è una questione di compromessi.

    
risposta data 15.12.2014 - 21:49
fonte
1

Stai chiedendo a due molto domande diverse. Il primo non è una generalizzazione di quest'ultimo, perché rispondere al primo non risponderà al secondo.

Ci sono molte altre cose che potrebbero influenzare la seconda domanda, ad esempio come affrontare le transazioni con più utenti e così via.

Per quanto riguarda la prima domanda, tutti sono d'accordo sul fatto che sia preferibile una soluzione più corta allo stesso problema, purché possa essere compresa. Non c'è una linea guida assoluta per questo, poiché la comprensione è soggettiva. Utilizza le revisioni del codice per trovare un punto debole che funzioni per la tua squadra in particolare.

    
risposta data 15.12.2014 - 21:49
fonte

Leggi altre domande sui tag