none
Apresentação :) RRS feed

  • Pergunta

  • Olá a todos os membros do grupo!
    Eu chamo-me Jessica Nogueira, tenho 23 anos, sou de Vila Real e estudo Engenharia Informática na Universidade de Trás os Montes e Alto Douro (UTAD).
    Inscrevi-me nesta comunidade para ter a opurtunidade de ter discussões e partilha de conhecimentos, principalmente sobre o padrão arquitetónico MVP (Model-View-Presenter) no desenvolvimento de aplicações com o Windows Forms. 
    quinta-feira, 21 de fevereiro de 2013 16:11

Todas as Respostas

  • A alguns anos atras atuei em um projeto C# Desktop do qual utilizei a arquitetura MVP.

    Baseado em conclusões que tirei referente algumas pesquisas e tutorias que fiz sobre o padrão na época,
    desenvolvi minha solução semelhante ao exemplo abaixo.

    Todo o formulário implementa uma intereface referente ao mesmo que estaria no projeto VIEW portanto
    se eu tenho o formulário login eu devo ter a view View.ILogin e consequentemente a criação de todas as propriedades 

    e eventos.

    public partial class Login : ILogin
    {
        //blablabla
    }

    Cada propriedade do formulário deverá retornar o conteudo da caixa de texto ou setar valor na caixa de texto como no trecho abaixo

        public string Login
        {
            get{ return txt_Login.Text; }
            set { txt_Login.Text = value; }
        }
        public string Senha
        {
            get { return txt_senha.Text; }
            set { txt_senha.Text = value; }
        }


    Na tela de login eu tenho 2 caixas de texto (Login e Senha) e um botão Acessar, portanto na minha VIEW eu teria as propriedades LOGIN e SENHA e o evento Acessar

        public interface ILogin
        {
            string Login { get; set; }
            string Senha { get; set; }
            event AcessarDelegate OnAcessar;
        }
    
        public delegate bool AcessarDelegate();

    Logo para cada tela eu também tenho um  PRESENTATION então nesse exemplo eu tbém tenho o loginPresentation

    namespace Presentation
    {
        public class LoginPresentation
        {
            private ILoginPresentation _LoginPresentation;
    
            public LoginPresentation(ILoginPresentation view)
            {
                _LoginPresentation = view;
                _LoginPresentation.OnAcessar += new AcessarDelegate(LoginPresentation_OnAcessar);
            }
    
            public UsuarioDTO LoginPresentation_OnAcessar()
            {
                bool _retValidacao;
                try
                {
                    _busUsuario = new Usuario();
                    _UsuarioDTO = new UsuarioDTO();
    		_UsuarioDTO.Login = _LoginPresentation.Login
                    _UsuarioDTO.Senha = _LoginPresentation.Senha
                    
    		/*
    		
    		NESTE PONTO CHAMA-SE A BUSINESS QUE FAZ A VALIDAÇÃO DE ACESSO passando o objeto _UsuarioDTO
    
    		*/
    
    
                    return _retValidacao;
    
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
    
    
        }
    }

    Note que no construtor do meu presentation eu passo uma instancia da view. Veja no trecho abaixo como ficaria o LOAD do seu formulário LOGIN e o evento click do botão acessar

    public partial class Login : ILogin
    {
        Presentation.Acesso.Login _Presentation;
        protected void Page_Load(object sender, EventArgs e)
        {
            _Presentation = new Presentation.Acesso.Login(this);
        }
    
        protected void bt_Acessar_Click(object sender, EventArgs e)
        {
    
    	if (OnAcessar()==true)
    		blablablabla
    	else
    		blablablabla
    
        }
    
    
    }
    
    public event AcessarDelegate OnAcessar;

    Espero ter ajudado


    • Editado ti4fun.com terça-feira, 12 de março de 2013 21:34 Presentation
    • Sugerido como Resposta Maquine terça-feira, 9 de abril de 2013 03:23
    terça-feira, 12 de março de 2013 21:17