Gibt es Vorschläge für die Entwicklung eines Dokuments mit C # -Codierungsstandards / Best Practices? [geschlossen]

159

Ich bin ein Absolvent der KI (ca. 2 Jahre) und arbeite für eine bescheidene Operation. Es liegt an mir (vor allem, weil ich der erste "Anwender" in der Abteilung bin), ein grundlegendes (lesenswertes?) Dokument mit C # -Codierungsstandards zu erstellen.

Ich denke, ich sollte erklären, dass ich wahrscheinlich der jüngste Software-Ingenieur bin, aber ich freue mich auf diese Aufgabe, da ich hoffentlich tatsächlich in der Lage sein könnte, etwas halb brauchbares zu produzieren. Ich habe eine ziemlich umfangreiche Suche im Internet durchgeführt und Artikel darüber gelesen, was ein Dokument mit Codierungsstandards enthalten sollte / nicht. Dies scheint ein guter Ort zu sein, um nach einigen Vorschlägen zu fragen.

Mir ist klar, dass ich möglicherweise eine Tür zu einer ganzen Welt der Meinungsverschiedenheiten über den „besten Weg, Dinge zu tun“ öffne. Ich verstehe und respektiere die unbestreitbare Tatsache, dass jeder Programmierer eine bevorzugte Methode zur Lösung jeder einzelnen Aufgabe hat. Daher möchte ich nichts so drakonisch Proskriptives schreiben, dass es das persönliche Flair unterdrückt, sondern versucht, eine allgemeine Methodik zu finden und zuzustimmen Standards (z. B. Namenskonventionen), um den Code einzelner Personen besser lesbar zu machen.

Also hier geht .... irgendwelche Vorschläge? Überhaupt irgendwelche?

TK.
quelle

Antworten:

26

Ironischerweise ist es wahrscheinlich einfach, die tatsächlichen Standards festzulegen.

Mein erster Vorschlag wäre, den anderen Ingenieuren Vorschläge zu unterbreiten, was ihrer Meinung nach abgedeckt werden sollte und welche Richtlinien sie für wichtig halten. Die Durchsetzung jeglicher Art von Richtlinien erfordert ein gewisses Maß an Zustimmung der Menschen. Wenn Sie plötzlich ein Dokument darauf ablegen, in dem angegeben ist, wie Code geschrieben wird, stoßen Sie auf Widerstand, unabhängig davon, ob Sie der jüngste oder der älteste Mann sind.

Nachdem Sie eine Reihe von Vorschlägen erhalten haben, senden Sie diese zur Rückmeldung und Überprüfung an das Team. Lassen Sie die Leute wieder alle kaufen.

Möglicherweise werden bereits informelle Codierungspraktiken angewendet (z. B. Präfixierung von Elementvariablen, Namen von Kamelfallfunktionen). Wenn dies vorhanden ist und der meiste Code dem entspricht, zahlt es sich aus, um seine Verwendung zu formalisieren. Die Annahme eines gegenteiligen Standards wird mehr Kummer verursachen als es wert ist, selbst wenn dies allgemein empfohlen wird.

Es lohnt sich auch, den vorhandenen Code zu überarbeiten, um die neuen Codierungsstandards zu erfüllen. Dies kann wie Zeitverschwendung erscheinen, aber Code zu haben, der nicht den Standards entspricht, kann kontraproduktiv sein, da Sie eine Mischung aus verschiedenen Stilen haben. Es bringt die Menschen auch in ein Dilemma, ob Code in einem bestimmten Modul dem neuen Standard entsprechen oder dem vorhandenen Codestil folgen soll.

Andrew Grant
quelle
14

Ich habe immer Juval Lowys PDF als Referenz verwendet, wenn ich intern Codierungsstandards / Best Practices erstellt habe. Es folgt sehr nahe an FxCop / Source Analysis , einem weiteren unschätzbaren Werkzeug, um sicherzustellen, dass der Standard eingehalten wird. Zwischen diesen Tools und Referenzen sollten Sie in der Lage sein, einen netten Standard zu entwickeln, dem alle Entwickler gerne folgen, und sie durchsetzen können.

Dale Ragan
quelle
9

Die anderen Poster haben Sie auf die Grundlinie hingewiesen. Alles, was ich hinzufügen möchte, ist, Ihr Dokument kurz, süß und auf den Punkt zu bringen und eine hohe Dosis Strunk and White zu verwenden, um die "Must Haves" von den "Es wäre schön, wenn" zu unterscheiden ".

Das Problem bei der Codierung von Standarddokumenten besteht darin, dass niemand sie wirklich so liest, wie er sollte, und wenn er sie liest, folgen sie ihnen nicht. Die Wahrscheinlichkeit, dass ein solches Dokument gelesen und befolgt wird, variiert umgekehrt mit seiner Länge.

Ich bin damit einverstanden, dass FxCop ein gutes Tool ist, aber zu viel davon kann den ganzen Spaß beim Programmieren nehmen. Seien Sie also vorsichtig.


quelle
9

Schreiben Sie niemals Ihre eigenen Codierungsstandards, verwenden Sie die MS-Standards (oder die Sun-Standards oder ... je nach Ihrer Sprache). Der Hinweis liegt im Wort Standard, die Welt wäre ein viel einfacherer Ort zum Codieren, wenn nicht jede Organisation beschlossen hätte, ihre eigenen zu schreiben. Wer wirklich glaubt, bei jedem Team- / Projekt- / Rollenwechsel neue „Standards“ zu lernen, nutzt die Zeit eines jeden gut aus. Das Beste, was Sie jemals tun sollten, ist, die kritischen Punkte zusammenzufassen, aber ich würde davon abraten, auch das zu tun, da das, was kritisch ist, von Person zu Person unterschiedlich ist. Zwei weitere Punkte, die ich zu Codierungsstandards ansprechen möchte

  1. Schließen ist gut genug - Das Ändern des Codes, um den Codierungsstandards für den Buchstaben zu folgen, ist Zeitverschwendung, solange der Code nah genug ist.
  2. Wenn Sie Code ändern, den Sie nicht geschrieben haben, befolgen Sie die 'lokalen Codierungsstandards', dh lassen Sie Ihren neuen Code wie den umgebenden Code aussehen.

Diese beiden Punkte sind die Realität für meinen Wunsch, dass jeder Code schreiben würde, der gleich aussieht.

David Hayes
quelle
8

Ich fand die folgende Dokumentation sehr hilfreich und prägnant. Es stammt von der Website idesign.net und wurde von Juval Lowy verfasst

C # Codierungsstandard

NB: Der obige Link ist jetzt tot. Um die ZIP-Datei zu erhalten, müssen Sie ihnen Ihre E-Mail-Adresse geben (aber sie werden sie nicht für Marketingzwecke verwenden ... ehrlich). Versuchen Sie es hier

Abel Gaxiola
quelle
5

Ich habe gerade an einer Stelle begonnen, an der die Codierungsstandards die Verwendung von m_ für Mitgliedsvariablen, p_ für Parameter und Präfixe für Typen vorschreiben, z. B. 'str' für Zeichenfolgen. Vielleicht haben Sie so etwas im Hauptteil einer Methode:

m_strName = p_strName;

Schrecklich. Wirklich schrecklich.

Dämoncodemonkey
quelle
1
Mit IntelliSense in Visual Studio 2010 können Sie "Name" eingeben und es wird mit der Teilzeichenfolge übereinstimmen. Dies p_strNamemacht es 10% weniger schmerzhaft, wenn Sie gezwungen sind , mit einem solchen Gräuel zu arbeiten. : o
Sam Harwell
5

Ich würde Code Complete 2 hinzufügen zur Liste (ich weiß, Jeff ist hier eine Art Fan) ... Wenn Sie ein Junior-Entwickler sind, ist das Buch nützlich, um Ihre Gedanken so zu gestalten, dass die Grundlage für das Beste gelegt wird Code-Schreibpraktiken und Software-Erstellung gibt es.

Ich muss sagen, dass ich etwas spät in meiner Karriere dazu gekommen bin, aber es regelt viele der Arten, wie ich über Codierung und Framework-Entwicklung in meinem Berufsleben denke.

Ein Besuch lohnt sich;)

Samiq
quelle
2
Ich wollte das gleiche Buch vorschlagen. Muss man lesen.
Pascal Paradis
Ich bin gerade dabei, das Buch zu lesen, lese> 67%. Es hat die Art und Weise verändert, wie ich mir das Programmieren vorstelle. Muss lesen.
UrsulRosu
4

Die eigenen Regeln von Microsoft sind ein hervorragender Ausgangspunkt. Sie können sie mit FxCop erzwingen.

Keith
quelle
4

Ich wäre versucht, Microsoft StyleCop als Standard durchzusetzen. Es kann zur Erstellungszeit erzwungen werden. Wenn Sie jedoch über Legacy-Code verfügen, erzwingen Sie einfach die Verwendung von StyleCop für neuen Code.

http://code.msdn.microsoft.com/sourceanalysis

Schließlich wird es eine Refactor-Option zum Bereinigen von Code geben.

http://blogs.msdn.com/sourceanalysis/


quelle
2
Sie sind möglicherweise nicht mit allem einverstanden, was von StyleCop durchgesetzt wird, sind jedoch der Ansicht, dass Microsoft auf einen einzigen Standard zusteuert, der von StyleCop durchgesetzt wird. Dies ist also eine Reihe von Standards, mit denen andere Entwickler vertraut sein können. Die Übereinstimmung mit einem Großteil der übrigen Branche könnte wertvoll sein.
Bevan
4

Persönlich mag ich die, die IDesign zusammengestellt hat. Aber deshalb poste ich nicht ...

Das Knifflige in meiner Firma war, all die verschiedenen Sprachen zu berücksichtigen. Und ich weiß, dass meine Firma damit nicht alleine ist. Wir verwenden C #, C, Assembly (wir stellen Geräte her), SQL, XAML usw. Obwohl es einige Ähnlichkeiten bei Standards gibt, wird jeder normalerweise anders behandelt.

Ich glaube auch, dass höhere Standards einen größeren Einfluss auf die Qualität des Endprodukts haben. Zum Beispiel: Wie und wann Kommentare verwendet werden sollen, wann Ausnahmen obligatorisch sind (z. B. vom Benutzer initiierte Ereignisse), ob (oder wann) Ausnahmen im Vergleich zu Rückgabewerten verwendet werden sollen, wie kann objektiv bestimmt werden, was Controller-Code gegenüber Präsentationscode sein soll? usw. Versteh mich nicht falsch, es werden auch niedrige Standards benötigt (Formatierung ist wichtig für die Lesbarkeit!). Ich habe nur eine Tendenz zur Gesamtstruktur.

Ein weiteres zu beachtendes Element ist das Buy-In und die Durchsetzung. Codierungsstandards sind großartig. Aber wenn niemand mit ihnen einverstanden ist und (wahrscheinlich noch wichtiger) niemand sie durchsetzt, dann ist alles umsonst.

derGral
quelle
4

Da ich sowohl das für Philips Medical Systems veröffentlichte als auch das auf http://csharpguidelines.codeplex.com geschrieben habe, bin ich vielleicht etwas voreingenommen, aber ich habe mehr als 10 Jahre Erfahrung mit dem Schreiben, Verwalten und der Förderung von Codierungsstandards. Ich habe versucht, den einen CodePlex mit unterschiedlichen Meinungen zu schreiben, und den größten Teil der Einführung damit verbracht, wie man damit in Ihrer speziellen Organisation umgeht. Lesen Sie es und geben Sie mir Feedback .....

Dennis Doomen
quelle
Ich mag diesen Leitfaden WIRKLICH und denke, er folgt einem fantastischen Format (Schnellversion und Vollversion, wie viele Leute, die ich gesehen habe). Du bekommst meine Stimme gegen alle anderen, gute Arbeit. Ich empfehle dringend, dieses Dokument in Codeplex zu verwenden, da es eine wirklich gute Anleitung ist, um Notizen zu vergleichen oder genau zu befolgen.
Atconway
Das habe ich gesehen. Ich meine es ernst, mach weiter so und ich empfehle diesen Leitfaden zumindest als Ausgangspunkt für ernsthafte .NET-Entwickler.
Atconway
1
+1 für die großartige Arbeit, wünschte ich könnte +100. Es ist kurz, damit die Leute es tatsächlich lesen können - es gewinnt also die Microsoft- und IDesign-Standards. Es hat aussagekräftige Regelnamen, einen Spickzettel, eine Stildatei für VS / R # ... vielleicht fehlen umfangreichere Beispiele in einem Spickzettel :)
Victor Sergienko
2

SSW-Regeln

Es enthält einige C # -Standards + noch viel mehr .... hauptsächlich für Microsoft-Entwickler

Adam Cogan
quelle
1

Sie werden höchstwahrscheinlich so eingerichtet, dass sie fehlschlagen. Willkommen in der Branche.

Ich bin anderer Meinung - solange er das Dokument erstellt, ist das Schlimmste, was passieren kann, dass es von allen vergessen wird.

Wenn andere Personen Probleme mit dem Inhalt haben, können Sie sie bitten, ihn zu aktualisieren, um zu zeigen, was sie bevorzugen. Auf diese Weise ist es von Ihrem Teller und die anderen haben die Verantwortung, ihre Änderungen zu rechtfertigen.

Adam V.
quelle
Ich bin nicht einverstanden. Das Schlimmste, was passieren kann, ist, dass die Richtlinien inkonsistent sind. und Käfer rutschen vorbei. Wenn er zufällig Steuerungssoftware für den LHC schreibt, dann sind wir fertig. / Sarkasmus
TraumaPony
1

Ich bin ein großer Fan des Francesco Balena-Buches " Praktische Richtlinien und Best Practices für VB- und C # -Entwickler ".

Es ist sehr detailliert und deckt alle wesentlichen Themen ab. Es gibt Ihnen nicht nur die Regel, sondern erklärt auch den Grund für die Regel und bietet sogar eine Anti-Regel, bei der es zwei gegensätzliche Best Practices geben kann. Der einzige Nachteil ist, dass es für .NET 1.1-Entwickler geschrieben wurde.

Urini
quelle
1

Unser gesamter Codierungsstandard lautet ungefähr "Use StyleCop".

John Kraft
quelle
1

Ich muss das Dokument dotnetspider.com vorschlagen .
Es ist ein großartiges und detailliertes Dokument, das überall nützlich ist.

the_drow
quelle
1

Ich habe Juval's schon einmal benutzt und das ist vorbei, wenn nicht übertrieben, aber ich bin faul und passe mich jetzt einfach dem Willen von Resharper an .

kenny
quelle
0

Ich denke, ich stimme den anderen Kommentaren hier zu, dass die bereits verlinkten MS-Richtlinien ein ausgezeichneter Ausgangspunkt sind. Ich modelliere meinen Code weitgehend nach diesen.

Das ist interessant, weil mein Manager mir in der Vergangenheit gesagt hat, dass er nicht besonders scharf auf sie ist: D.

Du hast eine lustige Aufgabe vor dir, mein Freund. Viel Glück und bitte fragen Sie, ob Sie noch etwas brauchen :)

Rob Cooper
quelle
0

Der Standard von Philips Medical Systems ist gut geschrieben und folgt hauptsächlich den Microsoft-Richtlinien: www.tiobe.com/content/paperinfo/gemrcsharpcs.pdf

Meine Standards basieren darauf mit ein paar Verbesserungen und einigen Updates für .NET 2.0 (der Philips Standard ist für .NET 1.x geschrieben und daher etwas veraltet).

Joe
quelle
0

In dem Code, den ich schreibe, befolge ich normalerweise die .NET Framework-Entwurfsrichtlinien für öffentlich zugängliche APIs und die Monocodierungsrichtlinien für private Mitglieder und Einrückungen . Mono ist eine Open-Source-Implementierung von .NET, und ich denke, diese Leute kennen sich aus.

Ich hasse es, wie Microsoft-Code Speicherplatz verschwendet:

try
{
    if (condition)
    {
        Something(new delegate
        {
            SomeCall(a, b);
        });
    }
    else
    {
        SomethingElse();
        Foobar(foo, bar);
    }
}
catch (Exception ex)
{
    Console.WriteLine("Okay, you got me");
}

Was Sie in Mono-Richtlinien vielleicht seltsam finden, ist, dass sie Tabulatoren mit 8 Leerzeichen verwenden. Nach einiger Übung stellte ich jedoch fest, dass es mir tatsächlich hilft, weniger verworrenen Code zu schreiben, indem eine Art Einrückungslimit erzwungen wird.

Ich mag auch, wie sie ein Leerzeichen setzen, bevor sie Klammern öffnen.

try {
        if (condition) {
                Something (new delegate {
                        SomeCall (a, b);
                });
        } else {
                SomethingElse ();
                Foobar (foo, bar);
        }
} catch (Exception ex) {
        Console.WriteLine ("Okay, you got me");
}

Aber bitte erzwingen Sie so etwas nicht, wenn Ihre Mitarbeiter es nicht mögen (es sei denn, Sie sind bereit, zu Mono beizutragen ;-)

Dan Abramov
quelle