2015-04-16 5 views
6

Ho un metodo che accetta tre parametri: List<Class1> source, List<Class2) results e DateTime endDate. Posso capire perché l'accoppiamento di classe è quattro. Tuttavia, salta al dieci quando aggiungo questa dichiarazione:Perché Jump Couching si attiva quando utilizzo LINQ?

var warnings = from s in source 
    join r in results on s.Field1 equals r.Field1 into joined 
    from j in joined.DefaultIfEmpty() 
    where j == null 
    select string.Format("{0}{1}", A_CONSTANT, s.Field2); 

Le mie domande:

  1. Quali sono le sei nuove classi che sono state introdotte dalla dichiarazione LINQ?
  2. E poiché dieci è il limite superiore di "codice buono", ciò indica che LINQ non è una buona scelta qui?

risposta

5

Le sei classi aggiuntive sono forse:

  • IEnumerable<string> - il risultato della query
  • IEnumerable<Class1> - la raccolta sinistra
  • IEnumerable<Class2> - la collezione giusta
  • Func<Class1, int> - la parte sinistra dell'espressione join
  • Func<Class2, int> - la parte destra dell'espressione join
  • Func<Class1, Class2, string> - proiezione

È anche possibile che sta contando classe Enumerable poiché la query viene tradotto in chiamate di metodo estensione statici.

In entrambi i casi, l'analisi del codice non sembra ignorare le classi transitori utilizzate da Linq (che sia o o non sia discutibile). Il mio consiglio è di ignorarlo (magari contando manualmente l'accoppiamento e annotando la differenza) o di trovare uno strumento di analisi migliore.

Un'altra domanda potrebbe essere: aumenta l'accoppiamento complessivo? Sospetto che diverse di queste classi siano utilizzate in tutta la tua app, quindi potrebbe non fare una differenza significativa sul tuo accoppiamento generale.

+0

Se lo strumento utilizza le implementazioni delle parole chiave non è sufficientemente avanzato. L'analisi della complessità a questo livello può essere fatta a occhio, alla revisione del codice. – Gusdor

Problemi correlati