2010-11-22 16 views
1

我有一個多語言系統,以及遍佈我有我所說的每一個類「包裝屬性」,如地方:.NET 4,我可以使用屬性或其他OOP功能來簡化此代碼嗎?

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 

然後,我會複製和粘貼代碼,每翻譯領域。

我希望能夠以某種方式用一行代碼替換它,並帶有一個類。每次改變的唯一的東西就是這個字段的名字,比如「name」,「title」或者「subject」等等。這看起來有點浪費,我希望我的系統和使用一樣容易可能爲開發者。

我做了一些研究,屬性,但我不認爲這是我的回答是:

1)我不知道如何自動實例化的對象,特別是因爲這是延伸的LINQ實體,其中New()簽名已經由DBML生成。我目前的技術使用靜態功能。

2)「EntityID」是實時信息,不是編譯時。

有人可以建議我如何清理這個爛攤子嗎?

回答

1

不是字符串,您可以使用lamdas的:
Retrieving Property name from lambda expression
這樣,你至少可以得到編譯時檢查。

您可以使用stackwalking來推斷調用方法以及相關的屬性。所以你根本不需要手動引用屬性。但我不喜歡這種方法。

您可以使用IL重寫器PostSharpaspect-orientated programming。然後,您可以用一個屬性替換手動代碼。然後PostSharp將您的樣板代碼添加到具有該屬性的合適的代碼中。

但我不確定您的本地化整體設計是否良好。我從來沒有見過這樣做。而且我不明白什麼是二傳手。

+0

對不起,很遲才接受。我會想象,當試圖解決我的問題時,理解MVC的TryUpdateModel如何工作會有所幫助,這似乎也以某種方式遍歷這些屬性並檢查它們的屬性等。將在MVC源代碼中進行探討。 – 2013-12-01 10:31:43

相關問題