MVC - czy tak może być?

0

Hej.

W najbliższym czasie przyjdzie mi napisać pewną aplikację na zaliczenie na studiach. Tym razem nauczony doświadczeniami z poprzednich projektów, zanim cokolwiek napiszę, chcę mieć już wszystko rozplanowane. Poczytałem sobie trochę o wzorcach. Z wielką radością udało mi się znaleźć dla nich zastowanie. Niemniej jednak w pewnym momencie spostrzegłem, że moja książka jakoś nie omawiała MVC. Poczytałem trochę o tym w necie. Generalnie wydaje mi się, że ideę rozumiem. Chciałbym jednak was prosić o przeanalizowanie poniższego schematu działania mojego programu (a raczej jego początkowej części).

  1. Uruchamiam program. Sterownie przekazuje z maina do kontrolera.
  2. Kontroler tworzy instancję klasy (należącej do wartwy modelu) odpowiedzialnej za zczytanie ustawień z pliku
  3. Kontroler dysponując już odpowiednią wiedzą o ustawieniach tworzy stosowną instancję rodzaju bazy danych (z wartwy modelu)
  4. Kontroler tworzy instancje widoku okna logowania (małe tradycyjne... user, password, OK, Zamknij)
  5. Okno logowania (widok) pyta bazę danych (model) o listę użytkowników, by móc ją wyświetlić na rozwijanej liście.
  6. Użytkownik wpisuje username i pass.

i teraz zastanawiam się pomiędzy dwiema możliwościami

---------------wersja A-----------------
7. Widok wywołuje zapytanie (do modelu), czy może się zalogować z danym loginem i hasłem
8a. Jeżeli tak, to wysyła eventa do kontrolera, że użytkownik chce się zalogować z danym loginem i hasłem (które już są zweryfikowane
8b. Jeżeli natomiast informacja od modelu mówi, że dany login i hasło nie pasują do siebie, to widok sam zmienia stosownie swoje oblicze. Jeżeli dane były złe to np. wyskoczy jakiś msgbox o tym informujący...

---------------wersja B-----------------
7. Widok wysyła eventem wiadomość do kontrolera, że użytkownik chce się zalogować z danym loginem i hasłem.
8. Kontroler odpytuje model, czy jest możliwe logowanie z tymi danymi.
9. w zależności od odpowiedzi kontroler albo wyświetla stosowny komunikat o błędnych danych, albo rozpoczyna procedure logowania..

Wersja B wydaje mi się poprawniejsza.

Moje wątpliwości jednak wzieły się z tego rysunku:
user image

wnioskuje z tego, że widok ma prawo komunikować się z modelem. Pytanie brzmi...kiedy naprawdę powinien to robić?
Czy tylko wtedy, kiedy chce uzyskać od niego dane informacje, które są mu np potrzebne tylko do wyświetlenia? Czy może widok ma prawo podejmować proste decyzje, by zaoszczędzić pracy kontrolerowi?

Pytanie kolejne... gdzie naprawdę powinno być przekazane sterowanie zaraz po uruchomieniu programu? Czy to dobry pomysł, by kontroler zajmował się inicjalizacją potrzebnych struktur programu?

Czy często jest tak, że kontroler jest singletonem?

Wszelka Wasza pomoc bardzo mi się przyda. Jeżeli ktoś mógłby polecić jakiś artykuł z paroma przykładami odnośnie MVC...to też będę wdzięczny.

Pozdrawiam Serdecznie

0
  1. Kontroler może być singletonem pod warunkiem że nie przechowuje stanu. W przeciwnym wypadku się popieprzą stany dla różnych wywołań.
  2. Wzorce to tylko sugestie. Oba rozwiązania są dobre.
  3. Wybrał bym rozwiązanie B ponieważ jest trochę bardziej elastyczne, ale z drugiej strony wymaga dużo więcej pracy i kodowania.

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