Pergunta

Considere uma aplicação normal de clientes-encomendas com base no padrão MVC usando WinForms. A parte vista cresceu muito (mais de 4000 arquivos) e ele precisa ser dividido em partes menores.


Para este exemplo, vamos usar 3 projectos para a parte vista:

  • Principal - tem dependências para os outros 2 projetos. Instancia os formulários com as listas.
  • Clientes - tem 2 formas -. Clientes lista e clientes detalhes
  • ordens - tem 2 formas -. Ordens de lista e ordem detalhes

Sobre os detalhes do cliente formar há também uma lista de pedidos para esse cliente. A lista é recebida do OrdersController por isso é nenhum problema para fazer isso. Quando o usuário seleciona uma ordem, a lista vai ficar é guid e passá-lo como referência para o formulário de detalhes do pedido.

Isto significa que precisamos ter uma referência a ordens projeto no Clientes do projeto. (1)

Mas também na ordem detalhes formar há um link para o cliente que fez nessa ordem. Quando clicado, ele deve abrir os detalhes do formulário do cliente.

Isto significa que temos de ter uma referência para Clientes do projeto nas Ordens do projeto. (2)

De (1) e (2) teremos dependências cíclicas entre as ordens e projetos dos clientes.


Como isso pode ser evitado? Algum tipo de arquitetura plug-in? O projeto já está desenvolvido e a melhor solução seria envolver tão pouco a mudança de código possível.

Foi útil?

Solução

Alterar pelo menos um dos tipos para uma interface.

Por exemplo ter uma interface ICustomer e um tipo de cliente que implementa essa interface. Agora adicione o ICustomer ao projeto encomendas e dos clientes projeto de definir uma referência para as Ordens do projeto para que você possa implementar a interface. O tipo de ordem agora podem trabalhar contra o tipo ICustomer sem saber a real implementação.

E para uma solução melhor :-) Criar tanto uma interface IOrder ICustomer e e adicioná-los a um terceiro projeto biblioteca. E fazer referência a este projecto das outras duas e só trabalho com as interfaces, não com o implemenation.

Outras dicas

Se eles são tão fortemente acoplada talvez eles não deve ser dividida.

interfaces de extrair e colocá-los em assembly separado. Desde que você está usando a arquitetura MVC, ele não deve ser difícil. Dê uma olhada na Microsoft Composite UI Applications bloco de exemplos e boas práticas.

Eu acho que o seu principal problema não é a arquitetura de sua aplicação. Você precisa entender os limites e como dividir a funcionalidade entre eles. A divisão como a sua é bastante artificial, você tentar dividir a aplicação com base nos objetos de domínio. Tente usar funções de usuário ou temas funcionais fazer para que eo problema pode ir embora.

Do ponto de vista técnico, eu não entendo por que os seus pontos de vista deve estar ciente do outro existência - que soa um pouco estranho para mim. Você não está indo para dividir seus dados e sua lógica de negócio e no final do dia, um GUID é apenas uma picada que poderia passar facilmente através de usar métodos diferentes.

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