2015-08-31 11 views
5

Ich möchte vorwegnehmen, dass ich Dynamic Objects nicht sehr oft benutzt habe und erst kürzlich auf dieses Problem gestoßen bin. Ich habe ein bestimmtes Szenario, das ich unter erkläre, aber ich fragte mich, was genau die Vorteile der Implementierung eines dynamischen Objekts im Vergleich zum Erstellen einer Klasse für dieses Objekt waren.Welchen Vorteil bietet die Verwendung eines dynamischen Objekts beim Erstellen einer Klasse dieses Objekts?

Ich habe eine Methode, die ein dynamisches Objekt als Parameter verwendet. Aus Gründen der Länge werde ich nicht viel Code schreiben gerade genug, um den Punkt zu vermitteln:

public static Tax GetEmployeeTax(string Id, Employee employee, dynamic inputObject) 
{ 
var temp = new Employee(); 
//use the dynamic object properties 
return temp; 
} 

In diesem Fall wird inputObject Eigenschaften haben, die die Mitarbeiter Steuern, ohne direkt an den Arbeitnehmer-Klasse im Zusammenhang identifizieren helfen wird. In erster Linie habe ich die inputObject die folgenden Eigenschaften gegeben:

dynamic dynamicEmployeeTax = new ExpandoObject(); 
dynamicEmployeeTax.FederalTaxInfo = "Some information"; 
dynamicEmployeeTax.StateTaxInfo = "Some other information"; 

Gibt es irgendwelche Vorteile zu machen diese seine eigene Klasse im Vergleich zu einem dynamischen Objekt mit? Gibt es Vorteile auf die eine oder andere Art?

+3

Normalerweise würden Sie sich für 'dynamic' entscheiden, weil Sie * brauchen * zu. Gibt es einen Grund, warum Sie keinen Typ für "inputObject" erstellen können? – haim770

+2

Nun, wenn Sie eine Klasse für sie erstellen, erhalten Sie starke Tipp- und Kompilierungszeit vs Laufzeitfehler. – juharr

+1

Vereinbart mit @ haim770, Wenn Sie Objekte aus einer externen Quelle verwenden, in denen Sie verschiedene Objekte mit einer gemeinsamen Eigenschaft akzeptieren können, die keine Schnittstelle implementieren oder an einer Vererbungsbeziehung teilnehmen und nicht geändert werden können, dann Sie verwenden 'dynamic' als Ihren letzten Ausweg, nicht als Ihre erste Wahl. (Alternativ, wenn Sie nur zu faul sind, um einen Kurs zu machen - aber letztendlich wird das wahrscheinlich zurückkommen und Sie beißen). –

Antwort

1

Es gibt mehrere Gründe, warum Sie eine Klasse erstellen möchten:

  • starke Typisierung nutzt die Compiler Korrektheit sicherzustellen.
  • Jede Klasse, die Daten kapselt, ist wie ein Vertrag. Sie können sich vorstellen, wie Sie die Klasse untersuchen.
  • Sie zwingen den Kerl nach Ihnen zu lesen wie es funktioniert. Es ist einfacher, Klasseneigenschaften zu lesen und ihr Nutzen zu visualisieren.
  • Es ist ein Zeichen eine schlechte Planung und Technik. Sie erstellen Datenblobs anstelle von strukturierten Datensätzen, die ein bestimmtes Problem lösen. Denken Sie Schlammgruben gegen Legosteine.

Die Liste geht ad infinitum. Ich denke, der Konsens besteht darin, dies zu vermeiden. Es gibt extrem seltene Fälle, in denen dies nützlich ist. Für die meisten, halten Sie sich an Verträge und Codierung zu Abstraktionen nicht Implementierungsdetails.

Verwandte Themen