Onde deve Ver & Presenter nascer

votos
5

Eu entendo totalmente o padrão MVP agora, mas eu ainda lutam para ver onde pontos de vista e apresentadores são instanciado. Tenho visto alguns exemplos em que o apresentador está newed-se na vista, mas isso é correto. Depois de ler um post no blog de Jeremy Miller sobre a comunicação entre View e Presenter ele tinha uma função no Presenter para anexar o apresentador para a vista.

A minha pergunta é então este: Onde deve vistas e apresentadores ser criado? Também onde no winforms e webforms.

Publicado 09/12/2008 em 23:04
fonte usuário
Em outras línguas...                            


3 respostas

votos
3

Em webforms, a página é instanciado com o pedido. Desde que a página é a vista e você não pode controlar a ordem de execução, é a visão de que tem que se registrar com o apresentador

Respondeu 09/12/2008 em 23:15
fonte usuário

votos
2

No WinForms, eu instanciar a vista conforme necessário (por exemplo: no mainmétodo, ou em um método em outro apresentador, mas onde quer que faz sentido realmente). O ponto de vista, em seguida, cria e regista-se com uma nova instância de um apresentador.

Isto faz com vários pontos de vista usar a mesma lógica apresentador fácil, e escudos usuários da minha vista da minha decisão de arquitetura especial para a utilização MVP.

Respondeu 09/12/2008 em 23:28
fonte usuário

votos
1

Em primeiro lugar boa pergunta. Em segundo lugar, ele pode não importa, muito. Minha preferência pessoal é quase sempre fio até Apresentador e Vista na View.

Compare este cenário:

public class SomePresenter
{
    public ShowContactView(IContactView view)
    {
        IContact model = new Contact();
        new ContactPresenter(model, view);
        view.Show();
    }
} 

public class AnotherPresenter
{
    public ShowContactView(IContactView view)
    {
        IContact model = new Contact();
        new ContactPresenter(model, view);
        view.Show();
    }
} 

public class YetAnotherPresenter
{
    public ShowContactView(IContactView view)
    {
        IContact model = new Contact();
        new ContactPresenter(model, view);
        view.Show();
    }
} 

public partial class ContactView : Form, IContactView
{    
    public ContactView()
    {
        InitializeComponent();
    }
}

para isso:

public class SomePresenter
{
    public ShowContactView(IContactView view)
    {
        view.Show();
    }
} 

public class AnotherPresenter
{
    public ShowContactView(IContactView view)
    {
        view.Show();
    }
} 

public class YetAnotherPresenter
{
    public ShowContactView(IContactView view)
    {
        view.Show();
    }
} 

public partial class ContactView : Form, IContactView
{    
    public ContactView()
    {
        InitializeComponent();

        new ContactPresenter(new Contact(), this);
    }
}

Como você pode ver que este último tem a duplicação de código muito menor. É claro que é a duplicação bobo ou você poderia dizer que você pode mover a funcionalidade comum para uma função compartilhada, mas você começa o ponto, isso é apenas um exemplo .. Isso é quando você terá a mesma visão a ser instanciado em várias partes de sua aplicação.

Além disso, a vantagem de Ver conhecer o Presenter é que você só precisa fazer referência Presenter no seu projeto View, para que você possa voltar a usar a mesma Presenter em diferentes aplicações de interface do usuário. Caso contrário, você vai precisar fazer referência a todos os projetos Ver no Presenter ..

Mas o que é mais importante é ver como os diferentes modelos se encaixam no seu caso. Para ser honesto, há mais possibilidades ainda. Veja esta questão duplicado.

Respondeu 18/01/2013 em 00:15
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more