Witam czy wzorzec MVP w Win formsach jest obecnie używany czy raczej się tego nie używa i jest jakiś inny lepszy wzorzec ?
- Rejestracja:prawie 9 lat
- Ostatnio:ponad 2 lata
- Postów:60
- Rejestracja:ponad 7 lat
- Ostatnio:4 miesiące
- Postów:1065
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ć.

- Rejestracja:około 8 lat
- Ostatnio:prawie 4 lata
- Postów:203
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.
- Rejestracja:prawie 9 lat
- Ostatnio:ponad 2 lata
- Postów:60
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();
}
}
}
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ć
Trzeba by było zapytac inaczej, czy w ogóle WinForms jeszcze jest używany.

- Rejestracja:około 17 lat
- Ostatnio:około 3 godziny
- Lokalizacja:Wrocław
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ą.

- Rejestracja:około 8 lat
- Ostatnio:prawie 4 lata
- Postów:203
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.
- Rejestracja:ponad 7 lat
- Ostatnio:4 miesiące
- Postów:1065
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.

- Rejestracja:około 17 lat
- Ostatnio:około 3 godziny
- Lokalizacja:Wrocław
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.

- Rejestracja:około 22 lata
- Ostatnio:30 dni
- Postów:5042
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
- Rejestracja:ponad 7 lat
- Ostatnio:4 miesiące
- Postów:1065
Ja mam cały czas nowe projekty w WinForms ale to raczej przemysłowa nisza. Na szczęście :)
- Rejestracja:ponad 7 lat
- Ostatnio:4 miesiące
- Postów:1065
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 :)


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.