Im Rahmen eines Projektes wurden die Programmierstandards schriftlich festgehalten, diese Vorlage kann man für weitere Projekte verwenden:
1 Programmierstandards
1.1 Namenskonventionen
Keine ungarische Notation wie btnOk. Stattdessen: okButton.
1.1.1 PascalCasing und CamelCasing
PascalCasing und CamelCasing bezeichnen Namenskonventionen, in denen die Wortteile in zusammengesetzten Bezeichnern groß geschrieben werden. Es werden keine Unterstriche verwendet. Im PascalCasing beginnen die Bezeichner mit einem Großbuchstaben, im CamelCasing mit einem kleinen Buchstaben:
Beispiel:
MainMenu (PascalCasing)
mainMenu (CamelCasing)
1.1.2 Namespaces
Namespaces beginnen mit „Firma.RemaPlus“, gefolgt von einem Punkt, gefolgt von weiteren Namen, die bei weiteren hierarchischen Gliederungen durch weitere Punkte voneinander getrennt werden.
Beispiel:
namespace Firma.Produkt.Blogic.Workflow
1.1.3 Assemblies
Die Namen von Assemblies sollten sich in der Regel an den Namen der Namespaces orientieren, die sie implementieren.
Beispiel:
Firma.Produkt.Blogic.Workflow.dll
1.1.4 Projekte
Die Projektnamen sollten sich in der Regel an den Namen der Namespaces orientieren, die sie implementieren.
Beispiel:
Firma.Produkt.Blogic.Workflow
1.1.5 Interfaces
PascalCasing mit großem, vorangestelltem „I“ (Ausnahme zum Thema Präfixe).
Beispiel:
interface IDispose
1.1.6 Klassen
PascalCasing
1.1.7 Properties
PascalCasing
1.1.8 Methoden
PascalCasing
1.1.9 Eventhandler
Wie Methoden, der Name sollte i. d. R. den Eventnamen als Postfix beinhalten. Da die Designer hier einen Unterstrich für die Trennung von Variablenname und Eventname verwenden, ist hier der Unterstrich zugelassen.
Beispiel:
protected void MainMenu_SelectedIndexChanged(object sender, EventArgs e) {...}
1.1.10 Membervariablen
CamelCasing
Membervariablen können das Präfix „m“ erhalten (Ausnahme zum Thema Präfixe).
Beispiel:
private int mCount;
1.1.11 Statische Variablen
CamelCasing
1.1.12 Lokale Variablen
CamelCasing
1.1.13 Parameter
CamelCasing
1.1.14 Enumerationen
CamelCasing
Der Name einer Enumeration hat kein Postfix „Enum“. Bei den Werten werden keine Präfixe verwendet.
1.1.15 Konstanten
Großbuchstaben. Wortteile werden durch Unterstriche getrennt.
1.2 Sprache
Alle Bezeichner in Visual Studio und in der Datenbank sind in englischer Sprache zu halten.
1.2.1 Kommentare/Inline-Dokumentation
Kommentare und Inline-Dokumentation sind auf Deutsch abzufassen.
Als Kommentarzeichen „//“ verwenden, nicht „/* ... */“
Zu kommentieren sind:
* Klassen
* Methoden und Properties, die nicht trivial sind.
Beispiel:
/// <summary>
/// Initialisiert das Objekt mit einem User.
/// </summary>
/// <param name="user">Der aktuelle User</param>
private void Init(User user)
{
...
}
* Nicht einfach zu verstehende oder wichtige Codestellen sind nach Bedarf zu kommentieren.
1.3 Strukturierung von Code in Regions
Aus Gründen der Lesbarkeit sollen folgende Regionen verwendet werden:
* Felder
* Eigenschaften
* Methoden
* Eventhandler
1.4 Klammern
Geschweifte Klammern werden auf die folgende Zeile gesetzt.
1.5 Sichtbarkeit von Variablen
Membervariablen sind immer als „private“ zu deklarieren. Der Zugriff erfolgt ggf. über Properties.
1.6 Exceptionhandling
Kein simples Abfangen und Werfen von Exceptions (catch-throw). Exceptions nur abfangen, wenn Fehler behandelt werden kann. Falls ein Abfangen und erneutes Werfen einer Exception notwendig sein sollte, die Exception mit „throw;“ und nicht mit „throw(ex);“ erneut werfen, weil in der zweiten Variante der Callstack neu aufgebaut wird und die Information über die ursprünglich auslösende Methode verloren geht. Exceptions sollten so weit im Stack hochgereicht werden, bis eine sinnvolle Behandlung möglich ist.
Kein „catch Exception“, sondern immer eine spezifische Exception verwenden, z. B. ArgumentNullException.
Prüfen von Parametern so früh wie möglich. Ggf. eine von ArgumentException abgeleitete Exception werfen.
private void Init(User user)
{
if (user == null)
{
throw new ArgumentNullException("user", "User darf nicht null sein.");
}
}
1.7 Literale und andere konstante Werte
Literale und andere konstante Werte sind i. d. R. als Konstanten, ReadOnly-Variablen oder in Ressourcen-Dateien abzulegen.
1.8 Markup in Aspx-Seiten
Die von den Designern automatisch generierten Ids sind durch sinnvolle Bezeichner ersetzen.