Mam aplikację która ma kilka form i dla każdej formy jest odpowiadający mu presenter. Teraz mam przycisk na jednej z formie, chciałbym tak zrobić żeby po kliknięciu w tą forme pojawiła sie inna forma. Jak to zrobić aby program był zgodny z wzorcem MVP?
Ja to robię tak, że PresenterA
(ten od IViewA
) ma metodę ShowViewB
, która wywołuje metodę IViewNavigator
wyświetlającą IViewB
. Implementacja IViewNavigator
siedzi tam gdzie implementacje wszystkich widoków, więc potrafi utworzyć i wyświetlić formę.
@somekind czy dobrze zrozumiałem, że powinno to wyglądać tak:
// Presenter Layer
interface IViewNavigator
{
void ShowViewByName(string viewName);
}
class PresenterA
{
public IViewNavigator Navigator { get; set;} ;
void ShowViewB()
{
Navigator.ShowViewByName("ViewB");
}
}
// View Layer
public Navigator : IViewNavigator
{
void ShowViewByName(string viewName)
{
// tutaj tworze okna
}
}
int main()
{
var n = new Navigator;
var pA = new PresenterA();
pA.Navigator = n;
Prawie dobrze, ale nie rób czegoś takiego jak ShowViewByName
, bo to tylko źródło potencjalnych problemów z jakimiś magicznymi stringami. Metody powinny być konkretne i jasno mówiące co robią.
I nie ma też po co robić z Navigatora
publicznej właściwości. To tylko klasa pomocnicza dla prezentera, używana wewnętrznie, więc trzymaj go w prywatnym polu i ustawiaj w konstruktorze.
// Presenter Layer
interface IViewNavigator
{
void ShowViewB();
void ShowViewC(SomeObject additionalDataForView);
}
class PresenterA
{
public IViewNavigator navigator;
public PresenterA(IViewNavigator viewNavigator)
{
this.navigator = viewNavigator;
}
publc void ShowViewB() // To wołamy z widoku
{
this.navigator.ShowViewB();
}
}
Ok, dziękuje za wyjaśnienie :) Dajcie mu ktoś plusa.
Offtopując, z wiadomych przyczyn wiadomo, że nie zarejestrowany użytkownik nie może zaakceptować odpowiedzi, ale co myślicie o tym aby dodać taką opcję jak: "Zaproponuj zaakceptowanie posta", taką opcję mogłby wybrać niezarejestrowany, a jak np 3 zarejestrowanych lub moderator uzna że jest to prawidłowa odpowiedź to dostaje wtedy ptaszka.