.NET 4, Могу ли я использовать атрибуты или некоторые другие функции ООП для упрощения этого кода? - PullRequest
1 голос
/ 22 ноября 2010

У меня многоязычная система, и везде у меня есть то, что я бы назвал «свойствами оболочки» в каждом классе, например:

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, где подпись New () уже сгенерирована DBML.В моей нынешней технике используются статические функции.

2) «EntityID» - это информация в реальном времени, а не во время компиляции.

Кто-нибудь может подсказать, как мне убрать этот беспорядок?

1 Ответ

1 голос
/ 22 ноября 2010

Вместо строк вы можете использовать lamdas:
Получение имени свойства из лямбда-выражения
Таким образом вы, по крайней мере, получаете проверку во время компиляции.

Вы можете использовать stackwalking, чтобы вывести вызывающий метод и, следовательно, связанное свойство. Таким образом, вам не нужно вручную ссылаться на свойство вообще. Но мне не нравится такой подход.

Вы можете выполнять аспектно-ориентированное программирование с помощью переписывающего устройства IL, например PostSharp . Тогда вы можете заменить ручной код с атрибутом. Затем PostSharp добавляет ваш шаблонный код к свойствам с этим атрибутом.

Но я не уверен, что ваш общий дизайн для локализации хорош. Я никогда не видел, чтобы это делалось таким образом. И я не понимаю, для чего этот сеттер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...