Crie uma classe regular ou uma classe interna para um objeto de parâmetro?
-
22-08-2019 - |
Pergunta
Em vez de passar muitos argumentos para um método, eu estava encapsulando-o em um objeto argumento.
Nota ??em>: simplied for demo
Para tal caso, um, o que seria uma prática melhor?
• Crie uma classe e nome -lo como
InventorySaveArgs
- ou -
• Criar uma classe aninhada e nome -lo comoSaveArgs
?
E você também explicar por que alguém iria escolher um ou o outro?
[EDIT] :. Esse tipo de argumento será usado em outros conjuntos, bem
questão lado :. Só por curiosidade, se não houver um nome padrão para encapsular vários parâmetros para um único objeto por acaso
[UPDATE] : Diretrizes encontrada uso Nested Tipo no MSDN
InventorySaveArgs
deve estar disponível a partir de outro assembléias, por isso estou indo com uma classe regular.
Solução
IIRC .NET Diretrizes de Design são bastante claras sobre isso - não deve haver tipos aninhados públicos
.Outras dicas
Gostaria de nomeá-lo InventorySaveArgs
apenas no caso de você querer fazer o tipo disponível para outros tipos de uso. Se o nome dele InventorySaveArgs
desde o início, então você vai ter um nome que seja significativo em todos os contextos, se você precisar refatorar.
Eu escolheria o primeiro, criar uma classe externa e nomeá-la InventorySaveArgs. Se a classe particular é usado em um método público, o único argumento para não incluí-lo fora da classe é a poluição namespace.
Ter a classe interna é francamente irritante em C # porque você deve constantemente prefixar o nome do tipo com o nome da classe. Como foi dito, uma vez que o público a única motivação para donig esta é a redução da poluição do namespace. Mas se o seu namespace é tão grande que os InventorySaveArgs classe está tornando grande demais, você provavelmente precisará quebrar o seu namespace de qualquer maneira.
O único padrão para encapsular vários parâmetros para um único objeto que eu já ouvi de um refatoração padrão detalhado por Martin Fowler