Нелегальное / ненадлежащее использование атрибутов? - PullRequest
5 голосов
/ 23 ноября 2010

У меня есть класс, который я использую в качестве дескриптора для объекта. В этом дескрипторе есть несколько Type ссылок для классов, которые должны быть созданы для различных операций с этим объектом. Я думал о том, чтобы извлечь эти ссылки и заменить их атрибутами в классе дескриптора.

Из этого:

class MyDescriptor : BaseDescriptor {
    public Type Op1Type { get; }
    public Type Op2Type { get; }
}

К этому:

[Op1(typeof(foo))]
[Op2(typeof(bar))]
class MyDescriptor : BaseDescriptor {
}

Я использую атрибуты очень редко. Это будет считаться плохим использованием их?

Ответы [ 5 ]

0 голосов
/ 23 ноября 2010

Атрибуты - это довольно элегантный способ выразить это в исходном коде, но при этом убогая производительность во время выполнения.

Вы захотите создать кеш во время выполнения для быстрого поиска, возможно, используя Dictionary<Type, Type>.

0 голосов
/ 23 ноября 2010

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

Дочерний класс имеет атрибут, который будет прочитан родительским классом, и он создаст экземпляр этоготипа.

0 голосов
/ 23 ноября 2010

Я не вижу проблем в том, как вы используете атрибуты, но я также не вижу никаких преимуществ, которые вы получили. Возможно, если вы поделитесь дополнительной информацией, будет проще найти решение.

0 голосов
/ 23 ноября 2010

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

Независимо от ваших намерений, я не вижу проблем с реализацией.

0 голосов
/ 23 ноября 2010

Я бы лично использовал Внедрение зависимостей вместо того, чтобы вставлять зависимость в сам тип в время компиляции .

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

Внедрение зависимостей позволяет вам изменять такое поведение во время выполнения в дополнение квозможность заменить их на заглушки / макеты .

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