Wzorzec MVP- czy jest aktualny ?

Odpowiedz Nowy wątek
2018-01-27 13:16
0

Witam czy wzorzec MVP w Win formsach jest obecnie używany czy raczej się tego nie używa i jest jakiś inny lepszy wzorzec ?

Pozostało 580 znaków

2018-01-27 14:29
0

Jak użyjesz to jest używany a jak nie to nie :)
Niektórzy lubią MVVM, są jakieś przykładowe implementacje a Devexpress ma nawet framework MVVM dla WinForms ale jak próbowałem to trzeba kliknąć pierdyliard razy, żeby coś zobaczyć.

Pozostało 580 znaków

2018-01-27 14:31
0

Czyli jak użyje mvp to będzie dobrze ?

Pozostało 580 znaków

2018-01-27 14:33
2

Jak dobrze użyjesz, to będzie dobrze.

Pozostało 580 znaków

2018-01-27 19:39
1

Ten wzorzec ma prawie 30 lat, a MVC jest starszy o 20 lat i obydwa żyją.


Bydgoszcz, Senior .Net Developer

Pozostało 580 znaków

2018-01-28 03:03
0

Mam pytanie do wzorca MVP. Gdzie powinna się znaleźć logika biznesowa? w Presenter czy Model?

Jeśli nie wiesz gdzie trzymać logikę to znaczy że nie rozumiesz tego wzorca, ale spoko są was miliony. - Slepiec 2018-01-28 11:48

Pozostało 580 znaków

2018-01-28 08:14
0

W modelu

Pozostało 580 znaków

2018-01-28 14:29
0

@Slepiec: też uważałem że model, lecz w Internecie jest dużo przykładów z logiką w prezenterze i zglupialem.

Pozostało 580 znaków

2018-01-28 17:26
0

Przydatny w aplikacjach, gdzie jeden przycisk = jeden widok. Wtedy prezenter tworzy instancje tego widoku i zajmuje się stricte nim (w przeciwieństwie do MVC, gdzie jeden kontroler może zarządzać wieloma widokami). Wygodny w połączeniu z MVVM, gdzie odpowiedzialność za wstrzyknięcie ViewModelu do widoku podejmuje właśnie Presenter. Jeśli chodzi o przepływ danych, to standardowy scenariusz wygląda mniej więcej tak: widok podejmuje jakieś działanie, wyzwalany jest handler eventu (na przykład naciśnięcie przycisku). Następnie wywołujemy jakąś metodę w ViewModelu (który w MVVM posiada zachowanie). Następnie ViewModel korzysta z metod z warstwy logiki biznesowej i ma za zadanie odpowiednio zaagregować dane do widoku. Wszystko celem maksymalnego odseparowania logiki od prezentacji.

Pozostało 580 znaków

2018-01-29 00:15
0

Czy tak to powinno mniej więcej wyglądać?
MODEL:

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;

namespace MVPTUT.Model
{
    public class Tabela
    {
        MySql.Data.MySqlClient.MySqlConnection connection;
        string server = "127.0.0.1";
        string database = "test";
        string login = "root";
        string password = "";
        string connectionString;
        string query { get; set; }

        public DataTable Load()
        {

            connectionString = "SERVER=" + server + ";" + "DATABASE=" +
            database + ";" + "UID=" + login + ";" + "PASSWORD=" + password + ";";
            query = "SELECT * FROM test";
            using (MySqlConnection connection = new MySqlConnection(connectionString))
            using (MySqlDataAdapter dataAdapter = new MySqlDataAdapter(query, connection))
            using (DataSet ds = new DataSet())
            using (DataTable dt = new DataTable())

            {
                ds.Tables.Add(dt);
                connection.Open();
                dataAdapter.Fill(dt);
                return dt;
            }
        }

    }
}

PRESENTER:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MVPTUT.View;
using MVPTUT.Model;

namespace MVPTUT.Presenter
{
    public class TabelaPresenter
    {
        ITabela tabelaView;
        public TabelaPresenter(ITabela view)
        {
            tabelaView = view;
        }

        public void Load()
        {
            Tabela tabela = new Tabela();

            tabelaView.dtOut = tabela.Load();

        }

    }
}

VIEW
INTERFACE

using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MVPTUT.View
{
    public interface ITabela
    {
        object dtOut { get; set; }
    }
}

FORM

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MVPTUT.View;
using MVPTUT.Presenter;

namespace MVPTUT
{
    public partial class Form1 : Form, ITabela
    {
        public Form1()
        {
            InitializeComponent();
        }

        public object dtOut
        {
            get
            {
                return dataGridView1.DataSource;
            }
            set
            {
                dataGridView1.DataSource = value;
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            TabelaPresenter tb = new TabelaPresenter(this);
            tb.Load();
        }
    }
}
edytowany 1x, ostatnio: ww1994, 2018-01-29 00:16

Pozostało 580 znaków

2018-01-30 15:57
0

Kiedyś chyba @somekind wrzucił fajny przykład.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0