Alta coesione e concorrenza - Sono in conflitto interessi?
-
03-10-2019 - |
Domanda
Stavo leggendo codice pulito di Robert Martin e in che menziona sul codice essere altamente coesivo:
Le classi dovrebbe avere un piccolo numero di variabili di istanza. Ognuno di metodi di una classe dovrebbero manipolare uno o più di tali variabili. Nel generale il metodo a più variabili manipola la più coesa che metodo è quello della sua classe. Una classe in che ciascuna variabile è utilizzato da ciascun metodo è al massimo cohesivemethod massimamente coesa
Ma quando stiamo cercando di scrivere codice concorrente, ci sforziamo di limitare la portata di variabili da un unico metodo per evitare condizioni di gara. Ma questo si traduce in codice che è almeno coerente.
Quando si progetta un'applicazione / classe, quello che se preferite - di coesione o di concorrenza?
Soluzione
mi piace un bel po 'di concetti di Martin, ma le vostre esigenze di codice da eseguire correttamente e se non lo fa, tutte le belle metriche del mondo non stanno andando a farti guardare meglio.
A questo si aggiunge che i problemi di threading sono tra i peggiori ci sono da mettere a punto, e non si dovrebbe compromettere il vostro disegno per la concorrenza di conformarsi con la vostra idea di quello che qualcuno ha scritto in un libro su di coesione. Anche in questo caso, non sto bussando Martin ... Sono sicuro che avrebbe detto la stessa cosa. Dopo tutto, egli riconosce che quasi tutto è in un continuum nella maggior parte dei suoi scritti.
Non sono sicuro che si sta mettendo l'accento in modo del tutto al posto giusto anche se (potrebbe essere solo il modo che sto leggendo la tua domanda). Martin non sta dicendo che si dovrebbe fare come molte variabili vivono a livello di classe il più possibile. Sta dicendo che le variabili livello di classe, quanti stai usando? Se si promuove variabili che non è necessario, si potrebbe non essere sempre maggiore coesione ... si potrebbe essere sempre più stretto accoppiamento.