2010-11-22 2 views
1

Ich habe ein System für mehrere Sprachen, und alle über den Ort Ich habe, was ich in jeder Klasse „Wrapper Eigenschaften“ aufrufen, wie zB:.NET 4, Kann ich Attribute oder eine andere OOP-Funktion verwenden, um diesen Code zu vereinfachen?

Public Property Name(Optional ByVal ForceLanguageCode As String = Nothing) As String 
    Get 
     Return Translations.GetByCode(Me.EntityID, "name", ForceLanguageCode) 
    End Get 
    Set(ByVal value As String) 
     Translations.SetByCode(Me.EntityID, "name", value, ForceLanguageCode) 
    End Set 
End Property 

würde ich dann für jeden übersetzbar diesen Code kopieren und einfügen Feld.

Ich hoffe, dass ich das mit einer Codezeile irgendwie ersetzen kann, mit einer Klasse. Die einzige Sache, die sich jedes Mal ändert, ist der Name des Feldes, wie "Name", "Titel" oder "Thema", etc. Das scheint ein bisschen eine Verschwendung und ich möchte, dass mein System so einfach zu bedienen ist wie möglich für Entwickler.

habe ich einige der Forschung in Attribute, aber ich glaube nicht, dass meine Antwort wie:

1) Ich weiß nicht, wie automatisch die Objekte instanziiert, zumal dies erstreckt, um eine LINQ Einheit, in der Die neue() Signatur wird bereits von der DBML generiert. Meine derzeitige Technik verwendet statische Funktionen.

2) Die "EntityID" ist Echtzeit-Informationen, nicht Kompilierzeit.

Kann jemand vorschlagen, wie ich dieses Durcheinander aufräumen könnte?

Antwort

1

Statt Strings können Sie lamdas verwenden:
Retrieving Property name from lambda expression
diese Weise werden Sie mindestens compiletime Prüfung erhalten.

Sie könnten Stackwalking verwenden, um die Aufrufmethode und damit die zugehörige Eigenschaft zu ermitteln. Sie müssen also nicht manuell auf die Eigenschaft verweisen. Aber ich mag diesen Ansatz nicht.

Sie können aspect-orientated programming mit einem IL-Rewriter wie PostSharp tun. Dann könnten Sie den manuellen Code durch ein Attribut ersetzen. PostSharp fügt dann Ihren Standardcode zu den Eigenschaften mit diesem Attribut hinzu.

Aber ich bin mir nicht sicher, ob Ihr Gesamtdesign für die Lokalisierung gut ist. Ich habe es noch nie so gesehen. Und ich verstehe nicht, wofür der Setzer ist.

+0

Entschuldigung für die sehr spät akzeptieren. Ich würde mir vorstellen, dass, wenn ich versuche, mein Problem zu lösen, zu verstehen, wie MVCs TryUpdateModel funktioniert, dies scheint auch durch die Eigenschaften in irgendeiner Weise zu gehen und sie nach Attributen usw. zu überprüfen. Wird in der MVC-Quelle herumstochern. –

Verwandte Themen