Glauben Sie, C # Attribute (oder ähnliche Mechanismen) sind eine gute Idee oder tun entmutigen Sie die Verwendung von ihnen?

StackOverflow https://stackoverflow.com/questions/761537

Frage

Ich habe basierend viele Designs und Frameworks, die C # Jahre Eigenschaften in den letzten 4 oder 5 verwenden.

Aber in letzter Zeit sehe ich viele Menschen öffnend entmutigend ihre Verwendung oder Veränderung ihrer Rahmenbedingungen schaffen, die Notwendigkeit oder von ihnen Gebrauch zu reduzieren.

fand ich sie ein Geschenk des Himmels sein, aber jetzt bin ich schon gefragt, was mir fehlt.

Zur Klarstellung: Verwendung Konvention über Konfiguration wird zu einem wichtiges Prinzip folgen vor allem im ORM-Feld. Ist dieser Bereich Sie Felder mit einer Konfigurationsdatei zuordnen können (XML), ein Attribut verwenden, oder haben eine gemeinsame Namenskonvention, die direkt an Felder in Ihrer Datenbanktabellen zuordnet. Ich habe keine Hinweise auf Angebot, aber ich habe einige Gegenreaktion gegen das Hinzufügen eines weiteren Attribut in den Mix zu lesen.

Aber ich fühle mich über die drei Entscheidungen, die ich gerade genannt, die noch am meisten Sinn Attribute machen. Eine Konfigurationsdatei ist schwieriger zu pflegen und eine gemeinsame Namenskonvention bindet Sie für die Umsetzung des Datenbankfeldes. Attribute werden platziert genau, wo sie benötigt werden, und die implemntation kann, ohne Abklemmen ändern, in dem es verwendet wird.

War es hilfreich?

Lösung

Es gibt wirklich zwei Zwecke Attribute:. Als Benutzer sichtbare Dinge, und wie die Dinge von einem Compiler emittieren

Ich nehme an, Sie sprechen über Benutzer sichtbar Attribute.

Generell würde ich sagen, dass die Benutzer sichtbare Attribute sind nicht ideal.

Die meisten der Zeit, die sie verwendet werden, irgendeine Form von kundenspezifischen Sprache oben auf C # einzubetten. DLINQ Attribute sind ein gutes Beispiel dafür. Ein besserer Ansatz, aus der Sicht des Verbrauchers, wäre in der ersten Klasse Unterstützung der Host-Sprache hinzuzufügen. Das würde mit dem Gefühl viel natürlicher beenden. (Sprachunterstützung mit für Tabellen und Fremdschlüssel zu definieren wäre viel einfacher, mit zu arbeiten dann all verrückt Linq-to-SQL-Attributen).

In Wirklichkeit jedoch eine Programmiersprache erstreckt, ist zu kostspielig für die meisten Entwickler. Die Vorteile einfach nicht aus, die Kosten wiegen.

Vielleicht einen Tag C # haben Meta-Programmierung Funktionen, die einfach zu tun, so etwas machen.

Im Moment jedoch ist diese Fähigkeit nicht vorhanden.

Dies läßt Dich mit 3 Optionen:

  1. Verwenden Sie Attribute
  2. Verwenden Sie eine dynamische Sprache, und generiert Code zur Laufzeit
  3. Nur nicht verwendet generative Programmierung

In der Regel # 1 endet die einfachste Wahl, auch zu machen sind, wenn es nicht ideal ist.

Andere Tipps

Dies ist eine schwierige Frage für eine allgemeine Antwort zu geben. Attribute sind eine andere Sprache-Funktion, die unglaublich leistungsfähig sind, wenn sie richtig verwendet, aber tun wegen Missbrauch das Potenzial haben. Ich habe noch nie einen zwingenden Grund gesehen, die Verwendung von Attributen zusammen und wirklich keinen Grund zu entleeren zu denken, dass sie eine schlechte Idee sind.

In der Tat genau das Gegenteil ist wahr. Attribute ermöglichen Rahmen spezifische Informationen in den Metadaten hinzufügen. Informationen, die einfach nicht leicht über eine Art Hierarchie ausgedrückt werden. Dies erhöht drastisch die Leistung von Frameworks, die Attribute verwenden.

Ich habe sicherlich eine Implementierung oder zwei gesehen, wo die Menschen sie missbraucht ein bisschen, aber nichts Besonderes. Kannst du genauer sein? Gibt es bestimmte Attribute / Frameworks Sie sprechen.

Das ist eine ziemlich große Frage, wie „soll ich Käse in meinem Auflauf setzen“; Die Antwort auf beide ist „es hängt davon ab, was Sie machen.“

Wenn Sie die starke Nutzung von addributes sind Herstellung und Verwendung fast wie ein deklarativen Programmierparadigma, dann sind Sie wahrscheinlich gehen in Schwierigkeiten auf dem Weg zu laufen. Ob es von einer Verlangsamung irgendwo in der Reflexion kommt oder einfach nur allgemeine Wartbarkeit ist man nur vermuten.

Es ist wie alles andere ... sie verwenden, wenn sie angemessen sind und Ihren Code effizienter oder lesbar machen. Verwenden Sie sie nicht, um sie zu verwenden, und verlaß sie nicht, um sie zu verlassen.

Ich finde sie sehr nützlich, wenn es um die Definition von Metadaten über meinen Code kommt. Ich benutze sie benutzerdefinierte Berichte, für die Plug-in-Architekturen zu erzeugen und zu Code von Drittanbietern für die Kommunikation.

Ich nehme an, Sie alles vereinbarungs tun können, aber Ich mag sie.

Ich sehe die starke Nutzung von Attributen in ASP.NET MVC. In der Tat, das Schalten zu MVC hat mir meine Verwendung von Attributen deutlich zu erhöhen. Ich bin mir nicht sicher, wo Sie Ihre Wahrnehmung von anti-Attribute spiel herkommt, aber ich sehe sicher nicht aus MS, zumindest in Bezug auf MVC.

Besonders gefällt mir die Art und Weise, die Querschnittsverhalten (Aspekte) über diesen Controller / Aktionen zur Verfügung zu stellen Attribute können verwendet werden, die so eingerichtet sind. Zu sehen, wie ist MVC vor Attribute Aufruf zu behandeln gebaut und nach dem Aktionsaufruf, ich habe zu glauben, dass dies die bevorzugte Art und Weise ist es, Aspekte zu bekommen in MVC zu arbeiten.

Nun, wenn ASP.NET MVC durch nichts zu gehen, würde ich sagen, nicht darum kümmern. So viel ist in diesem Rahmen mit Reflexion und Attributen getan, dass ich sehe keine Probleme mit ihm. MVC ist ein ziemlich neues Framework, und es wird überall verwendet. Von Eingang Validierung, Fehlerbehandlung, die sehr genial Action Attribute, gibt es eine Menge von ihnen. Also nein, ich persönlich nichts falsch mit ihnen sehen.

Ich persönlich denke, Attribute, wie die meisten Sprachfunktionen, haben ihren Platz, aber kann missbraucht oder missbraucht werden.

In dem richtigen Rahmen, sind sie von unschätzbarem Wert. Sie vereinfachen definitiv Dinge wie DI-Frameworks ( MEF ist ein gutes Beispiel), und sind sehr, sehr nützlich für Dinge wie Test-Frameworks.

Ich denke, verrückt Hinzufügen benutzerdefinierte Attribute zu viel des Guten kann jedoch. Ich persönlich liebe mithilfe von Attributen, sondern versuchen, ihre Verwendung auf ein Minimum zu halten, und verwenden sie nur, wo sie am meisten Sinn machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top