O que é uma boa prática para dividir apresentadores em um padrão de interface de MVP que têm crescido muito grande?

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

  •  08-07-2019
  •  | 
  •  

Pergunta

Um problema que tenho com freqüência correr em ultimamente é o problema das minhas aulas de apresentador de crescimento muito grande. Normalmente, eu posso cortar uma grande classe regular, sem perder o ritmo. Mas os apresentadores, por vezes, são um pouco mais difícil de aparar, sem tornar o código mais difícil de seguir.

Especialmente quando a página começa a encher-se com os controles orientados CRUD. Às vezes eu dividir os controlos, mas se eles são afetados por outros controles a lógica de coordenação é complexa em seu próprio direito. Às vezes eu dividir a lista ou recuperação de dados grade, mas às vezes isso pode ter armadilhas semelhantes.

Existem técnicas ou regras de ouro, ou áreas comuns que você refatorar fora de seus apresentadores?

Foi útil?

Solução

Eu costumo usar duas abordagens:

  1. Extrair e delegar as regras de negócio para classes de domínio.
  2. Partition a vista para controles relacionados logicamente, em seguida, criar uma nova interface de visualização para cada partição. Você pode, então, dividir o seu apresentador ao longo dessas mesmas linhas. Se a plataforma seus utilizando suportes subformulário grupos de componentes (C # controles de usuário, quadros Delphi, etc), esta é uma maneira poderosa para fazer controles reutilizáveis.

Atualizar

Quando vistas de divisão, eu normalmente começar por divisão da interface e ter minha forma implementar várias interfaces.

public class ComplexForm: Form, ISubView, IOtherSubView
{
    ...
}

Então eu dividir o apresentador no entanto muitos pontos de vista que eu criei.

public class SubViewPresenter
{
    private ISubView subView;
    ...
}

public class OtherSubViewPresenter
{
    private IOtherSubView otherSubView;
    ...
}

Você pode ir um passo adiante e mover a implementação de ISubView e IOtherSubView para controles de usuário ou deixá-lo como está. Se você estiver usando uma visão passiva padrão este é brincadeira de criança desde o formulário apenas lida com a lógica de interface do usuário de qualquer maneira. Uma vez eu dividir o apresentador, eu tento evitar a comunicação direta entre apresentadores. Se qualquer comunicação é necessário que eu tento fazê-lo indiretamente por meio de objetos de domínio.

Outras dicas

Tente extrair o código que, fora de passar dados para o seu DAL ou empurrando-o para a visão atividade executa. Por exemplo, se você tem que fazer um alerta ou executar lógica de negócios, tentar extrair aqueles fora em classes separadas. Costumo lidar com o mesmo problema e têm vindo a tentar mover tanto lógica quanto possível para as classes de domínio / entidade individual e executar a validação lá.

Hope isso é útil.

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