Wzorzec MVP- czy jest aktualny ?

Wzorzec MVP- czy jest aktualny ?
W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
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 ?

JP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1065
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ć.

W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

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

a_s_f
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
2

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

SL
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Bydgoszcz
1

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

W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

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

a_s_f
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Rzeszów
0

W modelu

W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

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

darkrat
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 203
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.

W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

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

Kopiuj
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:

Kopiuj
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

Kopiuj
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

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


JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
0

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

HA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 115
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.

  • Rejestracja: dni
  • Ostatnio: dni
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ć

W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

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

  • Rejestracja: dni
  • Ostatnio: dni
0

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

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
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ą.

HA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 115
0

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

W1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 60
0

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

darkrat
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 203
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.

JP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1065
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.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
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.

JU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5046
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

JP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1065
0

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

BO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
0

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

JP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1065
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 :)

  • Rejestracja: dni
  • Ostatnio: dni
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.