würde ich der allgemeine Konsens nehmen ist, dass man sie überall platzieren, die sinnvoll für den Anwendungsfall macht, aber im Allgemeinen Ich fühle mich gibt es einen besten Weg, alles in einer Lösung zu strukturieren Probleme zu minimieren, fördern positive Modularität und einfache Wartung.
Nun ja, im allgemeinen Fall können Sie einfach alles wo immer Sie es wünschen. Die Probleme beginnen jedoch, wenn Sie in einem Team arbeiten. In einem Team müssen andere Leute die Struktur des Programms verstehen, um effektiv Code zu erstellen. Das bedeutet Konsequenz, was das Endziel ist.
Also, es ist nicht nur eine Frage der Intuition; In allen Unternehmen, in denen ich gearbeitet habe, habe ich angefangen, einen Kodierungsstandard zu schreiben und diesen überall aggressiv durchzusetzen. In diesem Codierungsstandard, habe ich in der Regel eine Tonne gute/schlechte Praktiken bei threading, den statischen Einsatz, die Platzierung von Variablen/Klassen, etc.
IIRC Link http://se.inf.ethz.ch/old/teaching/ss2007/251-0290-00/project/CSharpCodingStandards.pdf und https://msdn.microsoft.com/en-us/library/ff926074.aspx wird Ihnen einen Vorsprung geben, obwohl die erstere ein bisschen veraltet und beide beantworten deine Frage nicht wirklich. Es könnte jedoch mit dem helfen, was Sie auf lange Sicht erreichen wollen.
[...] Ich habe derzeit Delegierte in ihre eigene Datei, in einem 'Delegate' Namespace. Gibt es ein Versehen, das ich mache, indem ich das tue, oder überbebee ich den Anwendungsfall für Delegierte - oder ist das inline mit aktuellen Nutzungserwartungen?
Eine gemeinsame Bibliothek mit Schnittstellen ist sinnvoll. Eine Schnittstelle ist im Wesentlichen ein Vertrag zwischen "Client" und "Server", der ein wichtiges Gut zur Entkopplung einer Software ist.
Sie müssen an dieser Stelle feststellen, dass der "Schnittstellen" -Teil eine funktionale Zerlegung ist, keine technische. Mit anderen Worten: die Tatsache, dass Sie eine "Interface" -Bibliothek benötigen, ist eine Frage von Vertrag, nicht von technische Konstrukte. Daher sehe ich nicht, warum Sie jemals Klassen in einen "Klassen" -Ordner stellen würden und warum Sie Delegierte in einen "Delegierten" -Ordner stellen würden. Kurz gesagt, ein Delegiertenordner macht für mich keinen Sinn. Leg das Zeug dahin, wo es hingehört.
An diesem Punkt müssen Sie eine Entscheidung treffen. (1) Sie können einen Delegaten in einer einzigen Datei ablegen, (2) Sie können einen Delegaten in die Klassendatei einfügen, in der er verwendet wird (normalerweise verwende ich Delegaten für einen einzigen Zweck), (3) können Sie beides abhängig von Multi-Zweck und (4) können Sie einzelne Delegierten innerhalb der Klasse verschachtelt setzen. Das bedeutet im Grunde, dass Sie einen Delegaten als Funktionszeiger behandeln und ihn nicht als echte "Klasse" sehen.
Mit Blick auf funktionale Dekomposition können Sie argumentieren, dass ein Funktionszeiger genau wie Methoden zu einer Klasse gehört.
So zu folgern. Persönlich wähle ich normalerweise die Option (2) oder (3), weil sie kurz, klar und prägnant ist und keinen Einfluss auf die Menge an "Tipparbeit" wie (4) hat. Kommissionierung (1) wird wahrscheinlich Ihre Anwendung mit kleinen Dateien aufblähen, die wenig oder keinen Zweck haben, was andere Entwickler verwirren wird.
Wenn das Projekt groß ist, und SOLID-Typ-Entkopplung möchten, würde ich Delegaten die gleiche Behandlung wie "Schnittstellen" geben, nämlich in einer unabhängigen Assembly, so dass beide die Publisher/Implementierung und Abonnenten/Callback-Code gekoppelt sind die Delegierten-Assembly (und alle Typen, die sie verwenden) und nicht direkt miteinander. Ich muss zugeben, dass es heutzutage häufiger "Func" oder "Action" ohne ausdrücklichen Delegattyp gibt (Ähnliches gilt für generische IEnumerables und ILists <> etc). – StuartLC
Danke StuartLC !. [Func/Aktion/Prädikat/Konverter/Vergleich] (http://www.codeproject.com/Articles/741064/Delegates-its-Modern-Flavors-Func-Action-Predicate) sind neu für mich. Danke, dass Sie mich darauf aufmerksam gemacht haben! – Gui