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