У меня есть модель, которая должна быть сохранена в коллекции MongoDB. Чтобы получить имя коллекции, у меня есть два варианта передо мной.Атрибут против статического свойства
1) Атрибут
Я украсить класс с помощью пользовательских атрибутов и использовать отражение для доступа к значению внутри него. Затем я могу кэшировать его с помощью type
, чтобы избежать будущих поисков.
[MongoCollection("Foo")]
public class Foo
{
}
2) Статическое свойство
Здесь у меня есть статическое свойство в классе, который содержит название коллекции.
public class Foo
{
public static string CollectionName { get { return "Foo"; } }
}
Я считаю, что я склонен идти с прежним, как она выглядит и чувствует себя чище, но некоторые из старших разработчиков здесь обращают свой нос при использовании отражения.
Есть ли случай, который нужно сделать для первого варианта, или лучше пойти с вариантом 2?
Прежде всего, как вы будете фильтровать классы, если они arent отмечены атрибутами? И имхо. Если старший переводит свой нос на нечеткий атрибут, он должен сильно переусердствовать в своей профессии. Многие механики в .net основаны на отражении (например, MEF, чтобы назвать только один). Почти все полезные расширения, такие как EntityFramework или NUnit, также работают с отражением. Я бы не рекомендовал вариант 2 – lokusking
Я согласен с тем, что первый вариант является более чистым. Вариант три может состоять в том, чтобы использовать одно и то же имя для коллекции и класса. – ChriPf
@ChriPf Я чувствую, что это может сделать рефакторинг немного кошмаром. Если по какой-либо причине имя класса изменяется, сбор нужно будет переименовать. Или я чего-то не хватает? –