Wzorzec MVP- czy jest aktualny ?

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 ?

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ć.

0

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

2

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

1

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

0

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

0

W modelu

0

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

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.

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();
        }
    }
}


0

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

1

Poczytaj jeszcze o Clean Architecture. Wtedy logika typowo biznesowa znajduje się w warstwie domenowej w UseCase'ach/Interactorach, a MVP odpowiada za warstwę prezentacji.

0
ww1994 napisał(a):

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

przykłady zazwyczaj obrazują ideę a nie poprawną architekturę. gdyby miały obrazować prawdziwą apkę to byłyby zbyt rozbudowane
w większości przykładów w ogóle logikę, łącznie z połączeniem do bazy masz w widoku bo tak jest nie oszukując się - najszybciej coś pokazać

0

A jak bardzo kod który wstawiłem odchodzi od poprawnego pisania?

0

Trzeba by było zapytac inaczej, czy w ogóle WinForms jeszcze jest używany.

0
Hagefid napisał(a):

Poczytaj jeszcze o Clean Architecture. Wtedy logika typowo biznesowa znajduje się w warstwie domenowej w UseCase'ach/Interactorach, a MVP odpowiada za warstwę prezentacji.

Nie trzeba niczego czytać. MVP to wzorzec warstwy prezentacji, więc z definicji zawsze odpowiada za tę warstwę, a nie logikę biznesową.

0

Napisałem to dlatego, bo OP pytał się gdzie powinna się znajdować logika biznesowa.

0

A czy jest sens jest się zagłębiać w MVP WinFormsy, czy lepiej od razu ASP.NET MVC?

0
ww1994 napisał(a):

A czy jest sens jest się zagłębiać w MVP WinFormsy, czy lepiej od razu ASP.NET MVC?

W ogóle nie masz pojęcia, co chcesz robić i nikt za Ciebie tego nie podejmie. Jedno to aplikacja desktopowa, drugie to webówka. Na WinFormsach jest zbudowany m.in. cały czas rozwijany DevExpress i technologia wciąż jest żywa.

0
ww1994 napisał(a):

A czy jest sens jest się zagłębiać w MVP WinFormsy, czy lepiej od razu ASP.NET MVC?

To źle postawione pytanie. Na WinForms możesz mieć MVP, MVC (vide XAF od DevExpress) albo NULL architecture :) czyli encja na twarz i pchasz.

Moim zdaniem jest sens w nauce WinForms ale chyba więcej ofert teraz jest w webdev i mobile.

1

No w WinForms raczej nie ma teraz nowych projektów, a do starych raczej nie biorą juniorów.
ASP.NET MVC też jest już trochę przestarzałe, bo teraz raczej wszystko to REST API + klient w jakimś frameworku JS.

0
somekind napisał(a):

No w WinForms raczej nie ma teraz nowych projektów, a do starych raczej nie biorą juniorów.
ASP.NET MVC też jest już trochę przestarzałe, bo teraz raczej wszystko to REST API + klient w jakimś frameworku JS.

Mamy nowy .NET Core

0

Ja mam cały czas nowe projekty w WinForms ale to raczej przemysłowa nisza. Na szczęście :)

0

To teraz w czym dłubią desktopy? WPF tylko? Czy już większość przeszła na weba ?

0
Juhas napisał(a):
somekind napisał(a):

No w WinForms raczej nie ma teraz nowych projektów, a do starych raczej nie biorą juniorów.
ASP.NET MVC też jest już trochę przestarzałe, bo teraz raczej wszystko to REST API + klient w jakimś frameworku JS.

Mamy nowy .NET Core

W którym pisze się API dla JS-frameworków :)

0
Bogu napisał(a):

To teraz w czym dłubią desktopy? WPF tylko? Czy już większość przeszła na weba ?

W ogóle już prawie się nie pisze nic na desktopy, a jeśli już to raczej w WPF.

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