C # Antimuster
To cut a long story short: ich finde die Java-antipatterns eine unverzichtbare Ressource. Für Anfänger genauso wie für Profis. Ich habe noch etwas finden, wie diese für C#. Also ich werde eröffnen diese Frage als community-wiki und laden alle ein, Ihr wissen zu teilen. Als ich bin neu in C# bin, bin ich stark interessiert, aber nicht starten mit einige antipatterns :/
Hier sind die Antworten die ich finden insbesondere gilt für C# und nicht in anderen Sprachen.
Ich nur copy/Paste! Betrachten Sie werfen einen Blick auf die Kommentare auf diese als gut.
Werfen Sie die NullReferenceException
Werfen der falsche Ausnahme:
if (FooLicenceKeyHolder == null)
throw new NullReferenceException();
Eigenschaften und public-Variablen
Public-Variablen in Klassen (die Nutzung einer Immobilie statt).
Es sei denn, die Klasse ist eine einfache Daten-Transfer-Objekts.
Nicht zu verstehen, dass bool ein echter Typ, nicht nur eine Konvention
if (myBooleanVariable == true)
{
...
}
oder, noch besser
if (myBooleanVariable != false)
{
...
}
Konstrukte wie diese sind oft von C
und C++
Entwicklern, wo die Idee, ein boolean-Wert war nur eine Konvention (0 == false, alles andere true); ist dies nicht notwendig (oder wünschenswert), die in C# oder anderen Sprachen, die echte booleans.
Mit ()
Nicht verwenden using
gegebenenfalls:
object variable;
variable.close(); //Old code, use IDisposable if available.
variable.Dispose(); //Same as close. Avoid if possible use the using() { } pattern.
variable = null; //1. in release optimised away. 2. C# is GC so this doesn't do what was intended anyway.
InformationsquelleAutor der Frage |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erneute auslösen der exception falsch. Zu rethrow eine Ausnahme :
InformationsquelleAutor der Antwort
GC.Collect()
zu sammeln, statt Vertrauen in den garbage collector.InformationsquelleAutor der Antwort
Ich sehe das nicht ein viel zu viel, sowohl in Java und C#...
bonus-Punkte, wenn Sie auch
InformationsquelleAutor der Antwort
'nuff said
InformationsquelleAutor der Antwort
Sehe ich folgenden code viel:
werden sollte:
InformationsquelleAutor der Antwort
Beleidigung des law of Demeter:
InformationsquelleAutor der Antwort
Werfen
NullReferenceException
:InformationsquelleAutor der Antwort
Dies ist wahr, ich habe es gesehen mit meinen eigenen Augen.
Es tatsächlich verwendet wurde, in der app, und hatte sogar eine gespeicherte Prozedur, die mit ihm zu gehen, auch eine sp_GetNull das würde null zurückgeben....
machte meinen Tag.
Ich denke, die sp war für eine classic asp Website .. etwas zu tun mit einem ResultSet. die .net war jemand Ahnung von "konvertieren" Sie den code in .net...
InformationsquelleAutor der Antwort
Oder allgemeineren Fall:
InformationsquelleAutor der Antwort
Ich habe festgestellt, dass dies in unserem Projekt, und fast brach der Stuhl...
InformationsquelleAutor der Antwort
Ganz oft stolpere ich über diese Art von var-Missbrauch:
oder noch besser:
Mit var so keinen Sinn macht und gewinnt nichts. Es macht den code schwerer zu Folgen.
InformationsquelleAutor der Antwort
InformationsquelleAutor der Antwort
Nicht zu verstehen, dass bool ein echter Typ, nicht nur eine Konvention
oder, noch besser
Konstrukte wie diese sind oft von
C
undC++
Entwicklern, wo die Idee, ein boolean-Wert war nur eine Konvention (0 == false, alles andere true); ist dies nicht notwendig (oder wünschenswert), die in C# oder anderen Sprachen, die echte booleans.Aktualisiert: Also der Letzte Absatz zu verbessern die Klarheit.
InformationsquelleAutor der Antwort
Public-Variablen in Klassen (die Nutzung einer Immobilie statt).
Es sei denn, die Klasse ist eine einfache Daten-Transfer-Objekts.
Siehe Kommentare unten für die Diskussion und Klärung.
InformationsquelleAutor der Antwort
Habe ich tatsächlich gesehen.
beats die
isAvailable == true
anti-Muster, die Hände nach unten!So dass dies ein super-anti-pattern!
InformationsquelleAutor der Antwort
InformationsquelleAutor der Antwort
Private automatisch implementierte Eigenschaften:
InformationsquelleAutor der Antwort
Deklarieren und initialisieren allen lokalen Variablen am Anfang jeder Methode ist so hässlich!
InformationsquelleAutor der Antwort
Zwei string-anti-patterns
Anti-Pattern # 1
Prüfen von Zeichenfolgen für null oder leer
Anti-Pattern # 2 (nur für .NET 4.0)
Prüfen von Zeichenfolgen für null oder leer ist oder Leerzeichen
InformationsquelleAutor der Antwort
Unnötig casting (bitte Vertrauen Sie den compiler):
InformationsquelleAutor der Antwort
besser geschrieben als
und noch besser geschrieben als
Letzten code-listing arbeiten .NET 2.0 und höher
InformationsquelleAutor der Antwort
Sprechen mit einem Akzent immer holte mich ein.
C++ - Programmierer:
In C# dadurch erhalten Sie einen compiler-Fehler, wenn Sie die Art
if (1 = variable)
so dass Sie den code schreiben, der die Art und Weise Sie meinen, es anstatt sich Gedanken über die Dreharbeiten selbst in den Fuß.InformationsquelleAutor der Antwort
Nicht mit ternären ist etwas, was ich sehen, konvertiert c# gelegentlich
sehen Sie:
statt:
InformationsquelleAutor der Antwort
Zugriff auf geänderte Verschlüsse
(siehe link für Erklärung und fix)
InformationsquelleAutor der Antwort
Für concating beliebige Anzahl von strings die string-Verkettung anstelle von string builder
Exampls
InformationsquelleAutor der Antwort
ist dies als Allgemeinen ?
Ich weiß nicht, wie zu erklären, aber es ist wie jemand, der das abfangen einer Ausnahme und wiederholt den code immer und immer in der Hoffnung es funktioniert später. Wie wenn eine IOException Auftritt, Sie versuchen einfach, über und über, bis es funktioniert..
InformationsquelleAutor der Antwort
Dem Projekt bin ich auf hatte fünfzig Klassen Erben von der gleichen Klasse, die alle definiert:
Entweder legen Sie es in der übergeordneten Klasse, oder eine utility-Klasse aus, die Seite. Argh.
Haben Sie als das surfen durch The Daily WTF?
InformationsquelleAutor der Antwort
Massiv über-komplizierte "Page_Load" Methoden, die alles tun wollen.
InformationsquelleAutor der Antwort
Mithilfe von Eigenschaften für etwas anderes, als einfach einen Wert Abfragen oder möglicherweise eine kostengünstige Kalkulation. Wenn Sie den Zugriff auf eine Datenbank aus Ihrer Immobilie, sollten Sie es zu einem Methodenaufruf. Entwickler erwarten, dass Methodenaufrufe können teuer werden, Sie erwarten nicht, dass dies von Eigenschaften.
InformationsquelleAutor der Antwort
Fand diese ein paar mal in einem system, das ich geerbt...
und Umgekehrt
InformationsquelleAutor der Antwort