3 Stimmen

Halten Sie C#-Attribute (oder ähnliche Mechanismen) für eine gute Idee oder raten Sie von ihrer Verwendung ab?

Ich habe in den letzten 4 oder 5 Jahren viele Entwürfe und Frameworks entwickelt, die C#-Attribute verwenden.

In letzter Zeit sehe ich jedoch, dass viele Menschen offen von ihrer Verwendung abraten oder ihre Rahmenbedingungen so ändern, dass sie sie nicht mehr benötigen oder verwenden.

Für mich waren sie ein Geschenk des Himmels, aber jetzt frage ich mich, was ich verpasse.

Zur Klarstellung: Use Convention over Configuration wird zu einem wichtigen Prinzip, das vor allem im ORM-Bereich zu befolgen ist. In diesem Bereich können Sie Felder mit einer Konfigurationsdatei (XML) abbilden, ein Attribut verwenden oder eine gemeinsame Namenskonvention haben, die sich direkt auf Felder in Ihren Datenbanktabellen bezieht. Ich habe keine Referenzen, die ich zitieren könnte, aber ich habe einige Gegenreaktionen gegen das Hinzufügen eines weiteren Attributs zu dem Mix gelesen.

Aber ich denke, dass unter den drei Möglichkeiten, die ich gerade aufgelistet habe, die Attribute immer noch am sinnvollsten sind. Eine Config-Datei ist schwieriger zu pflegen und eine gemeinsame Namenskonvention bindet Sie an die Implementierung des Datenbankfeldes. Attribute werden genau dort platziert, wo sie benötigt werden, und die Implementierung kann geändert werden, ohne dass die Verbindung zu dem Feld, in dem es verwendet wird, unterbrochen wird.

7voto

JaredPar Punkte 699699

Diese Frage ist schwer allgemein zu beantworten. Attribute sind ein weiteres Sprachmerkmal, das bei richtiger Verwendung unglaublich leistungsfähig ist, aber auch das Potenzial für Missbrauch hat. Ich habe noch nie einen zwingenden Grund gesehen, die Verwendung von Attributen ganz zu verwerfen, und wirklich keinen Grund, sie für eine schlechte Idee zu halten.

Tatsächlich ist das genaue Gegenteil der Fall. Attribute ermöglichen das Hinzufügen von rahmenspezifischen Informationen zu den Metadaten. Informationen, die sich nicht so einfach über eine Typenhierarchie ausdrücken lassen. Dies erhöht die Leistungsfähigkeit von Frameworks, die Attribute verwenden, dramatisch.

Ich habe sicherlich schon die eine oder andere Implementierung gesehen, bei der sie ein wenig missbraucht wurden, aber nichts Spektakuläres. Können Sie etwas genauer sein? Gibt es bestimmte Attribute/Frameworks, von denen Sie sprechen?

5voto

Adam Robinson Punkte 176996

Das ist eine ziemlich weit gefasste Frage, so wie "soll ich Käse in meinen Auflauf tun"; die Antwort auf beides ist "es kommt darauf an, was man macht".

Wenn Sie stark von Additiven Gebrauch machen und sie fast wie ein deklaratives Programmierparadigma verwenden, werden Sie wahrscheinlich auf dem Weg dorthin auf Probleme stoßen. Ob das nun an einer Verlangsamung der Reflexion liegt oder einfach an der allgemeinen Wartbarkeit, kann niemand sagen.

Es ist wie bei allem anderen... verwenden Sie sie, wenn sie angemessen sind und Ihren Code effizienter oder lesbarer machen. Verwenden Sie sie nicht um ihrer selbst willen, und geben Sie sie nicht um ihrer selbst willen auf.

3voto

Scott Wisniewski Punkte 23882

Es gibt eigentlich zwei Zwecke von Attributen: als vom Benutzer sichtbare Dinge und als Dinge, die von einem Compiler ausgegeben werden.

Ich nehme an, Sie sprechen von den für den Benutzer sichtbaren Attributen.

Im Allgemeinen würde ich sagen, dass vom Benutzer sichtbare Attribute nicht ideal sind.

Meistens werden sie verwendet, um eine Form von benutzerdefinierter Sprache über C# einzubetten. DLINQ-Attribute sind ein gutes Beispiel dafür. Ein besserer Ansatz aus Sicht des Verbrauchers wäre es, die Host-Sprache um eine First-Class-Unterstützung zu erweitern. Das würde sich am Ende viel natürlicher anfühlen. (Eine Sprachunterstützung für die Definition von Tabellen und Fremdschlüsseln wäre viel einfacher zu handhaben als all die verrückten Linq-to-Sql-Attribute).

In der Realität ist die Erweiterung einer Programmiersprache jedoch für die meisten Entwickler zu kostspielig. Die Vorteile wiegen die Kosten einfach nicht auf.

Vielleicht wird C# eines Tages Metaprogrammierfunktionen haben, die solche Dinge einfach machen.

Zurzeit gibt es diese Möglichkeit jedoch nicht.

Damit bleiben Ihnen 3 Möglichkeiten:

  1. Attribute verwenden
  2. Verwendung einer dynamischen Sprache und Generierung von Code zur Laufzeit
  3. Verwenden Sie einfach kein generatives Programmieren

In der Regel ist die Nummer 1 die einfachste Wahl, auch wenn sie nicht ideal ist.

2voto

Brian Genisio Punkte 47135

Ich finde sie äußerst nützlich, wenn es darum geht, Metadaten über meinen Code zu definieren. Ich verwende sie, um benutzerdefinierte Berichte zu erstellen, für Plug-in-Architekturen und für die Kommunikation mit dem Code von Drittanbietern.

Ich nehme an, man kann alles mit Konventionen machen, aber ich mag sie.

1voto

tvanfosson Punkte 506878

Ich sehe eine starke Verwendung von Attributen in ASP.NET MVC. In der Tat hat der Wechsel zu MVC dazu geführt, dass ich meine Verwendung von Attributen deutlich erhöht habe. Ich bin mir nicht sicher, woher Ihre Wahrnehmung des Anti-Attribut-Backlashs kommt, aber ich sehe ihn sicherlich nicht bei MS, zumindest nicht in Bezug auf MVC.

Mir gefällt besonders die Art und Weise, wie Attribute verwendet werden können, um übergreifendes Verhalten (Aspekte) über die so dekorierten Controller/Aktionen hinweg bereitzustellen. Wenn man sieht, wie MVC aufgebaut ist, um den Aufruf von Attributen vor und nach dem Aufruf von Aktionen zu behandeln, muss ich glauben, dass dies der bevorzugte Weg ist, um Aspekte in MVC zum Laufen zu bringen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X