Pergunta

Saudações,

Eu tenho um objeto particular que pode ser construído a partir de um arquivo, como tal:

public class ConfigObj
{
     public ConfigObj(string loadPath)
     {
          //load object using .Net's supplied Serialization library
          //resulting in a ConfigObj object
          ConfigObj deserializedObj = VoodooLoadFunction(loadpath); 

          //the line below won't compile
          this = thisIsMyObj; 
     }
}

Eu quero, em essência, dizer "ok, e agora esse objeto que acabamos desserializado, este é o objeto que de fato são." Existem algumas maneiras de fazer isso, e eu estou querendo saber o que é considerado uma das melhores práticas. Minhas idéias são:

  • Criar uma função de cópia-into-me que copia o campo objeto pelo campo. Esta é a implementação atual e eu tenho certeza que é uma idéia horrível desde sempre que um novo membro é adicionado ao objeto que eu preciso também lembrar-se de adicioná-lo para a função de 'cópia em-me', e não há nenhuma maneira que seja sustentável .
  • Criar um método estático para a classe ConfigObj que atua como um construtor de-facto para carregar o objeto. Isso soa muito melhor, mas não muito melhor-prática-y.

Eu não estou totalmente feliz com qualquer um dos dois, no entanto. Qual é a melhor prática reconhecida aqui?

Foi útil?

Solução

A segunda opção é o que é chamado um fábrica método e é uma técnica de design comum. Se você usar essa técnica, você pode achar que você precisa saber o tipo de classe que você irá carregar antes de realmente carregar a classe. Se você topar com esta situação, você pode usar um tipo de nível superior de fábrica que olha para o fluxo e chama o método de fábrica para o tipo apropriado de classe.

Outras dicas

Não há nada de errado em ter um método estático em vez de um construtor. Na verdade, ele tem um número de vantagens .

Eu sempre ir com o método estático. Geralmente é uma espécie de uma hierarquia que é carregado e, portanto, apenas o objeto raiz precisa do método. E não é realmente uma abordagem incomum no framework .NET (por exemplo Graphics.FromImage), então ele deve estar bem com os usuários de sua classe.

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