.NET 4,我可以使用属性或其他一些OOP功能来简化此代码吗?

时间:2010-11-22 16:53:54

标签: .net asp.net 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
然后,我会为每个可翻译字段复制并粘贴该代码。

我希望能够以某种方式用一行代码替换一行代码。每次更改的唯一内容是字段的名称,例如“名称”,“标题”或“主题”等。这似乎有点浪费,我希望我的系统像以下一样易于使用对开发者来说是可能的。

我对属性进行了一些研究,但我不认为这是我的答案:

1)我不知道如何自动实例化对象,特别是因为这是扩展了一个LINQ实体,其中已经由DBML生成了New()签名。我目前的技术使用静态函数。

2)“EntityID”是实时信息,而不是编译时。

有人可以建议我如何清理这个烂摊子吗?

1 个答案:

答案 0 :(得分:1)

您可以使用lamdas代替字符串:
Retrieving Property name from lambda expression
这样你至少可以进行编译时检查。

您可以使用stackwalking来推断调用方法,从而推断出相关属性。所以你根本不需要手动引用该属性。但我不喜欢这种做法。

您可以使用aspect-orientated programming等IL重写器执行PostSharp。然后,您可以使用属性替换手动代码。 PostSharp然后将您的样板代码添加到具有该属性的专业人员。

但我不确定你的本地化整体设计是否合适。我从来没有见过这样做过。我不明白二传手的用途。