2015-04-16 10 views
6

Mam metodę, która ma trzy parametry: List<Class1> source, List<Class2) results i DateTime endDate. Rozumiem, dlaczego sprzężenie klasowe ma cztery. Jednak to skacze do dziesięciu gdy dodam to stwierdzenie:Dlaczego Class Coupling skacze, kiedy używam 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); 

moje pytania:

  1. Jakie są sześć nowych klas, które zostały wprowadzone przez oświadczenie LINQ?
  2. A skoro 10 to górny limit "dobrego kodu", czy oznacza to, że LINQ nie jest tu dobrym wyborem?

Odpowiedz

5

Sześć dodatkowe zajęcia są możliwe:

  • IEnumerable<string> - wynik zapytania
  • IEnumerable<Class1> - lewa kolekcja
  • IEnumerable<Class2> - prawo kolekcja
  • Func<Class1, int> - lewa część wyrażenia złączenia
  • Func<Class2, int> - prawa część wypowiedzi dołączyć
  • Func<Class1, Class2, string> - projekcja

Jest również możliwe, że licząc klasę Enumerable ponieważ kwerenda jest tłumaczona na statycznych wywołań metod rozszerzenie.

W obu przypadkach analiza kodu nie wydaje się zignorować przejściowych klas używanych przez Linq (czy to powinno być czy nie jest dyskusyjne). Moja rada polega na tym, aby je zignorować (być może ręcznie licząc sprzężenie i dostrzegając różnicę) lub znaleźć lepsze narzędzie do analizy.

Kolejne pytanie brzmi: czy zwiększy to łączność ogólnie? Podejrzewam, że kilka z tych klas jest używanych w całej aplikacji, więc nie może to mieć znaczącej różnicy w twoim ogólnym sprzężeniu.

+0

Jeśli narzędzie jest wyzwalane przez implementacje słów kluczowych, to nie jest wystarczająco zaawansowane. Analiza złożoności na tym poziomie może być przeprowadzona na oko, podczas przeglądu kodu. – Gusdor

Powiązane problemy