Meine Karriere begann als ein funktionierender Paradigma-Entwickler (LISP), und jetzt bin ich ein Hard-Core-Entwickler .net / C #. Natürlich bin ich verliebt in LINQ. Ich glaube aber auch an (1) das richtige Werkzeug für den Job zu verwenden und (2) das KISS-Prinzip beizubehalten: von den über 60 Ingenieuren, mit denen ich arbeite, haben vielleicht nur 20% Stunden von LINQ / funktionalem Paradigma und 5% 6 bis 12 Monate Erfahrung haben. Kurz gesagt, ich fühle mich gezwungen, von LINQ wegzubleiben, es sei denn, ich bin daran gehindert, ein Ziel ohne es zu erreichen (wobei das Ersetzen von 3 Zeilen O-O-Code durch eine LINQ-Zeile kein "Ziel" ist).
Aber jetzt hat einer der Ingenieure, der 12 Monate Erfahrung mit LINQ / funktionalem Paradigma hat, an jedem denkbaren Ort im Produktionscode LINQ zu Objekten oder wenigstens Lambda-Ausdrücken verwendet. Meine verschiedenen Appelle an das KISS-Prinzip haben zu keinen Ergebnissen geführt. Deshalb ...
Auf welche veröffentlichten Studien kann ich als nächstes eingehen? Welche "Coding Standard" -Richtlinie haben andere mit einigem Erfolg ausgeheckt? Gibt es veröffentlichte LINQ-Leistungsprobleme, auf die ich hinweisen könnte? Kurz gesagt, ich versuche, mein erstes Ziel - KISS - indirekt zu erreichen.
Natürlich könnte dieses Problem auf unzählige andere Bereiche ausgedehnt werden (z. B. übermäßiger Einsatz von Erweiterungsmethoden). Vielleicht gibt es einen "Uber" -Leitfaden, hoch angesehen (z. B. veröffentlichte Studien, usw.), der dabei einen breiteren Bogen schlägt. Alles?
LATE EDIT: Wow! Ich wurde geschult! Ich stimme zu, dass ich völlig falsch rangekommen bin. Aber zur Klarstellung, werfen Sie bitte einen Blick auf den Beispielcode, den ich gerade sehe. Ursprünglich hat es kompiliert und funktioniert, aber sein Zweck ist jetzt irrelevant. Geh einfach mit dem "Gefühl" davon. Jetzt, da ich dieses Sample ein halbes Jahr später wiederbesuche, bekomme ich ein ganz anderes Bild davon, was mich eigentlich stört. Aber ich hätte gerne bessere Augen als meine Kommentare.
%Vor%Nun, es klingt für mich so, als ob Sie den Code komplizierter machen wollen - weil Sie glauben, dass Ihre Kollegen dem wirklich einfachen Ansatz nicht gewachsen sind. In vielen Fällen finde ich, dass LINQ to Objects den Code einfacher macht - und ja, dass das Ändern von nur ein paar Zeilen zu einem enthält:
%Vor%wird
%Vor%zum Beispiel.
Wo es nicht ist macht den Code einfacher, es ist in Ordnung zu versuchen, ihn von LINQ wegzulenken - aber das obige ist ein Beispiel, wo Sie sicherlich nicht erheblich behindert werden, indem Sie LINQ vermeiden, aber der "KISS" -Code ist eindeutig der LINQ-Code.
Es klingt, als könnte Ihr Unternehmen davon profitieren, seine Ingenieure dahingehend zu schulen, LINQ to Objects zu nutzen, anstatt zu versuchen, immer den kleinsten gemeinsamen Nenner anzusprechen.
Sie scheinen Linq mit Objekten mit größerer Komplexität gleichzusetzen, weil Sie davon ausgehen, dass unnötiger Gebrauch es verletzt, "halten Sie es einfach, dumm".
Meine ganze Erfahrung war das Gegenteil: es macht komplexe Algorithmen viel einfacher zu schreiben und zu lesen.
Im Gegensatz dazu betrachte ich imperative, statementbasierte, state-mutational Programmierung als die "riskante" Option, die nur dann verwendet wird, wenn sie wirklich notwendig ist.
Ich würde vorschlagen, dass Sie sich bemühen, mehr Kollegen dazu zu bringen, den Nutzen zu verstehen. Es ist eine falsche Ökonomie zu versuchen, Ihre Ansätze auf diejenigen zu beschränken, die Sie (und andere) bereits verstehen, denn in dieser Branche zahlt es sich aus, mit "neuen" Praktiken in Kontakt zu bleiben (natürlich ist dieses Zeug nicht neu, aber als Sie weisen darauf hin, es ist neu für viele von einem Java oder C # 1.x Hintergrund).
Wenn ich versuche, etwas von "Leistungsproblemen" darauf zu pinnen, glaube ich nicht, dass Sie viel Glück haben werden. Der Aufwand für Linq-to-Objekte selbst ist minimal.
Tags und Links linq lambda linq-to-objects