A coleçãoPROPERTIESSEDBEREDERATILLY DO FXCOP é incompatível com a estrutura da primavera?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

FXCOP tem o Coleção propertiesshouldbereadonly governar Isso reclama se sua classe possui algum tipo de propriedade de coleção que os clientes podem definir. Em vez disso, sugere tornar os métodos Clear () e Add () ou AddRange () para alterar o conteúdo da coleção.

Concordo que contribui para uma interface mais limpa e mais controlada, mas estou lutando para fazer com que essa interface funcione com a estrutura da mola. Se eu quiser configurar um objeto com uma coleção de colaboradores, tenho que expor algumas propriedades de coleção para injetar os colaboradores. Eu olhei a documentação da primavera, e não consigo ver nenhuma maneira de dizer à Spring para chamar o método addRange (), estou perdendo alguma coisa?

Por enquanto, vou excluir o aviso com uma nota de que é necessário para a configuração da primavera.

Atualizar: Como eu não recebi nenhum petiscos aqui nos últimos dois meses, publiquei a mesma pergunta no Fórum FXCOP.

Foi útil?

Solução

Se a propriedade de coleção tiver apenas um getter exposto, assumiremos que os padrões recomendados pelo FXCOP que você liste será usada e adicionará à coleção. O primeiro padrão também é suportado.

Para coleções genéricas, isso está funcionando apenas se a propriedade exposta for do tipo ilist. Nós temos uma Edição jira Para a próxima versão para corrigir isso. BTW, esse é um padrão muito comum nas bibliotecas de classe base (como você provavelmente sabe ...), que é onde encontramos a necessidade de apoiar esse estilo no .NET 1.1 (que não sofre com a limitação listada acima) .

Saúde, Mark

Outras dicas

O problema é tão ruim quanto você pensa? Meu entendimento é que o FXCOP reclamará se você tiver uma propriedade de leitura/gravação como esta:

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

... porque os usuários da sua classe poderiam fazer isso:

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

Obviamente, você não deseja que os usuários da sua classe relatem completamente a lista. O FXCOP, portanto, recomenda esse padrão:

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

Portanto, agora os usuários da sua classe só podem adicionar e remover itens da sua lista, em vez de substituí -la com uma nova instância da lista.

Como a Spring.net implementa suas propriedades de coleta? Eles estão realmente lendo/escrevem como o meu primeiro exemplo? Nesse caso, seria interessante ver seus casos de uso para esse padrão, porque não parece certo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top