Является ли правило Collectionpropertieshouldbereadonly от FxCop несовместимым с spring Framework?

StackOverflow https://stackoverflow.com/questions/206746

  •  03-07-2019
  •  | 
  •  

Вопрос

У FxCop есть Правило сбора свойств должно быть доступно только для чтения это вызывает недовольство, если у вашего класса есть какое-то свойство коллекции, которое могут установить клиенты.Вместо этого предлагается сделать свойство доступным только для чтения и предоставить метод Clear() и методы Add() или AddRange() для изменения содержимого коллекции.

Я согласен, что это делает интерфейс более чистым и контролируемым, но я изо всех сил пытаюсь заставить этот интерфейс работать с Spring Framework.Если я хочу настроить объект с коллекцией коллаборационистов, я должен предоставить некоторое свойство collection для внедрения коллаборационистов.Я просмотрел все весенняя документация, и я не вижу никакого способа сообщить Spring о вызове метода AddRange(), я что-то упускаю?

На данный момент я собираюсь исключить предупреждение с пометкой, что это необходимо для настройки Spring.

Обновить: поскольку за последние два месяца я не получал здесь никаких откусов, я разместил тот же вопрос на Форум FxCop.

Это было полезно?

Решение

Если в свойстве collection указан только метод получения, мы предположим, что используются перечисленные вами шаблоны, рекомендованные FxCop, и добавим их в коллекцию.Первый шаблон также поддерживается.

Для универсальных коллекций это работает только в том случае, если открытое свойство имеет тип IList.У нас есть Проблема с JIRA в следующем выпуске это будет исправлено.Кстати, это очень распространенный шаблон в библиотеках базовых классов (как вы, вероятно, знаете ...), именно там мы впервые столкнулись с необходимостью поддержки этого стиля в .NET 1.1 (который не страдает от ограничений, перечисленных выше).

Твое здоровье, Марк

Другие советы

Действительно ли проблема так серьезна, как вы думаете?Насколько я понимаю, FxCop будет жаловаться, если у вас есть такое свойство чтения / записи, как это:

public List<Foo> Items { get; set; }

...потому что тогда пользователи вашего класса смогли бы это сделать:

myInstance.Items = new List<Foo>();

Очевидно, вы не хотите, чтобы пользователи вашего класса полностью переназначали список.Поэтому FxCop рекомендует использовать этот шаблон:

private List<Foo> _items = new List<Foo>();
public List<Foo> Items { get { return _items; } }

Таким образом, теперь пользователи вашего класса могут только добавлять и удалять элементы из вашего списка, а не перезаписывать его новым экземпляром List .

Как Spring.NET реализует свои свойства коллекции?Действительно ли они читают / пишут, как в моем первом примере?Если это так, было бы интересно посмотреть их варианты использования такого шаблона, потому что это не кажется правильным.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top