Usando Fábricas em apresentadores em um projeto de design Model View Presenter e Domain Driven

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

Pergunta

No domínio driven design, que parece ser uma boa prática para fábricas usam para criar seus objetos de domínio em sua camada de domínio (em vez de usar um construtor direta ou COI).

Mas o que sobre o uso das fábricas de objetos de domínio em uma camada apresentador. Por exemplo, digamos que estava criando um objecto de domínio de entrada de utilizador obtida a partir do apresentador.

Aqui está um exemplo, digamos que eu tenho um objeto de domínio de configuração que tem um número de configurações decimais.

classe pública Configuração: PersistantObject {

 public decimal temperature {get;set;}

 ...(times 20)

 public decimal gravity {get;set;}

}

De modo a criar este objecto na camada de domínio, em vez da camada apresentador, que teria de passar cada um desses valores decimais como parâmetros de função. Criando uma definição de função complicado e chamada.

ou seja ConfigurationService.CreateConfiguration (temperatura, ... (x20), gravidade);

A solução talvez melhor seria criar o objecto de configuração na camada apresentador, e atribuir todos os valores do objeto de configuração directamente a partir da entrada do usuário, ignorando uma chamada de função longa.

Configuração config = ConfigurationFactory.CreateNewConfiguration ();

config.temperature = temperatura;

.. (x20) .. = ...;

= config.gravity gravidade;

ConfigurationService.SaveNewConfiguration (config);

Mas eu estou querendo saber se essa abordagem é errada e por quê? Se ambas as abordagens são errado, o que é a melhor abordagem para a criação de um objeto longo da entrada do usuário e por quê?

Obrigado!

Foi útil?

Solução

Eu aconselho contra deixar seu domínio objetos para fora da camada de domínio e para a camada de apresentação. Mantenha a camada de apresentação focada na apresentação.

Por esta razão, eu construo de Transferência de Dados Objects para embaralhar os dados de e para as camadas de domínio e apresentação. No seu caso, ter o preenchimento de diálogo um DTO que é passado para o seu serviço e traduzido para o objeto de domínio correspondente.

Você não gostaria de construir objetos de domínio de DTOs cada vez, no entanto. Considere o caso em que um DTO representa apenas um subconjunto de um objecto de domínio . Re-construindo um objeto de domínio existente de um tal DTO iria dar-lhe um objeto de domínio parcial. Você provavelmente gostaria de manter um cache de pouco peso que segurava o objeto de domínio completo para que você poderia fazer uma atualização adequada.

Essencialmente, você chegar à solução DTO se você aplicou o Introduzir Objeto Parâmetro refatoração.

Outras dicas

Existem duas maneiras principais que eu iria lidar com esta

1) Se esta é a configuração através de um diálogo Gostaria de criar as classes que implementam o padrão de comando e ligam um diálogo com o objeto em questão. Por exemplo CmdCreateConfigurationService, e CmdEditConfigurationService.

CmdCreateConfigurationService iria contar com uma classe de fábrica e os parâmetros mínimos que você precisa selecionar o serviço de configuração correta.

configuração é uma interface de IConfigurationServiceEditor e passar isso como um dos parâmetros para CmdEditConfiguration Parameters. Com a IConfigurationServiceEditor interface que você definir como muitos métodos que você precisa para fazer a transferência de informações de e para o diálogo indolor fácil e possível. Eu recomendo usar uma coleção de chaves e Objeto values.The Comando sabe como configurar o serviço de configuração desta coleção. O diálogo sabe esperar esta coleção durante a configuração.

Independentemente da estrutura de dados que você vai fazer o trabalho de preencher o serviço de configuração no objeto de comando. Por ter objeto de diálogo / form / screen não implementar IConfigurationServiceEditor você pode automatizar seu teste e, em certas circunstâncias, fazer a configuração de easiers objetos complexos.

Eu desenvolvi este método para um softaware CAD / CAM que tem várias dezenas de formas paramétricas cada um tendo de 4 a 40 entradas.

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