Pergunta

Eu queria saber se existe um padrão oposto do padrão de fábrica. Por exemplo, quando um determinado necessidades objeto a ser excluído algumas necessidades extras de trabalho para ser feito, para desfazer a configuração que foi realizada no objeto de fábrica.

O alargamento do objeto de fábrica com um método Delete, por exemplo, parece errado, uma vez que o padrão de fábrica é um padrão criacional rigorosa.

Update: A razão pela qual eu estou usando uma fábrica é porque a configuração que precisa ser feito iria introduzir algumas dependências para o objeto que não caberia. Colocando essa configuração de no construtor iria causar o mesmo problema.

Foi útil?

Solução

Isso é caminho certo para uso da fábrica. Fábrica não é única maneira de criar objetos, mas também a maneira de dizer: eu preciso de uma inicialização especial para este tipo de objectos. Com o seu problema Acho que a melhor solução seria a de notificar fábrica com algum evento, como descartado. Portanto, o seu criação do objeto será feito de tal forma a: criar, subscrever fábrica para evento de objeto recém-criado. Cada objeto de tempo é eliminado você`ll notificar fábrica sobre isso e executar a ação que você precisa.

Se você não gosta de colocar isso em fábrica, você pode delegá-la a algum tipo de outro objeto, como DeathKeeper ;-). Portanto, o seu código será sometihng assim:

//Inside factory create method
MyObject obj = GetNewInitializedObject();
_detahKeeper.RegisterObject(obj);

return obj;

Agora, cada vez que você vai precisar para objeto de exclusão, o objeto irá notificar goleiro morte e faria toda a lógica dispor. By the way, eu não sei como tudo funciona, mas você pode usar a interface IDisposable para fazer a lógica personalizada para a eliminação recursos mantidos pelo objeto. A decisão depende what`s lá em seu projeto e é com você.

Outras dicas

Um repositório pode ser usado para excluir um objeto persistente, ou você pode usar o método de descarte para fazer uma limpeza em um na memória único objeto.

Eu uso um padrão de "Reciclagem Facility" trabalhando em conjunto com a fábrica:

  • tem um método "limpa" para cada classe que pode ser reciclado
  • ter uma "identificação única" para cada instância do objeto

Cada vez que um objeto atinge o seu fim-de-vida, enviá-lo para o "centro de reciclagem" (RF):

  • As lojas RF do objeto de acordo com alguma política (por exemplo, manter apenas X instâncias de classe Y)
  • Quando for necessária a uma instância da classe Y, o Factory "pede" a RF se o seu um tem
    • Se a RF tem uma mão, o RF chama de "() limpa" método na instância e retorna para a Fábrica

... e assim por diante assim por diante.

Espero que isso ajude.

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