2008-11-03 11 views
5

Używam wzorca Model-View-Presenter dla strony internetowej. Czy prowadzący powinien mieć świadomość Sesji, czy powinien tylko być tego świadomy?MVP - Czy prezenter powinien korzystać z sesji?

Chyba rozumiem, że pojęcia takie jak sesja są bardzo związane z architekturą widoku, więc czy powinny być ograniczone do widoku? W przeciwnym razie, co by się stało, gdybym chciał ponownie użyć prezentera na podobnej stronie w innej architekturze (lub czy nie muszę się tym martwić, chyba że mam taki zamiar)?

Odpowiedz

8

Robię coś takiego w mojej implementacji MVP Wstrzycam ICookieManager, ISessionManager, ICacheManager, IConfigurationManager, IRedirector do mojego prezentera, które są implementowane przez klasy, które zawijają funkcjonalność dla tego.

Umożliwia to prezenterowi, w którym można wstrzyknąć wyśmiewane wersje tych programów, a użytkownik nie ma bezpośrednich zależności w środowisku wykonawczym asp.net w prezenterze, co ułatwia testowanie.

Cheers

0

Zależy od tego, który obiekt chcesz ponownie użyć lub w inny sposób zawiera większość logiki biznesowej.

Założę się, że tylko prezenter powinien znać sesję, ponieważ obiekt ten jest najbliższy kontrolerowi w MVP.

2

Może to być nawet współdzielony moduł, który działa jako opakowanie w dowolnej używanej sesji. W ten sposób byłby dostępny dla wszystkich kontrolerów i mógłbyś w prosty sposób zmienić fizyczną implementację sesji.

Twój prezenter wypełni widok dowolną kontrolką pobraną z sesji.

0

Tak, jak mówi dove, owijaj cokolwiek, dostęp do sesji w innej klasie.

Oznacza to, że można wprowadzić próbną klasę tego typu, aby symulować różne wartości dla sesji.

Aby odpowiedzieć na twoje pytanie w sposób bardziej konkretny, mam tendencję do wybierania wzoru Supervising-Presenter (http://martinfowler.com/eaaDev/SupervisingPresenter.html), który sprawia, że ​​Widoki są BARDZO głupie. Tak więc tylko prezenter miałby dostęp do sesji (ale nie bezpośrednio, jak powiedziałem wcześniej) i powiedział View, co robić.

1

Dzięki wszystkim za odpowiedzi, tak aby podsumować ...

Czy mamy mówiąc, że rzeczywiście Presenter powinny mieć dostęp do danych z sesji (najlepiej za pomocą interfejsu) i jego widok, który nie powinien mieć do niego dostępu (pozostając głupim)?

+0

To moja opinia na ten temat, tak. – Duncan

0

Zajmuję się również biernymi podejściami MVP. Widziałem kilka rzeczy zrobionych w sieci, z których obie pozostawiają sesję uporczywości aż do widoku - albo poprzez wstrzyknięcie, jak wspomniano, albo wyraźne zarządzanie.

Zależność Przykłady wtrysku można zobaczyć tutaj: http://www.codeproject.com/KB/aspnet/Advanced_MVP.aspx i tutaj: http://geekswithblogs.net/opiesblog/archive/2006/06/30/83743.aspx. Sztuką jest tutaj zarządzanie wszystkimi instancjami sesji w zmiennej statycznej i zapobieganie ich wzajemnemu zastępowaniu. (Nie jestem pewien, pierwszy przykład realizuje to prawidłowo.)

Drugie podejście jest tutaj: http://codebetter.com/blogs/jeffrey.palermo/archive/2005/03/28/128592.aspx. W tym przykładzie widok wie, jak zapisać swój stan. Minusem jest to, że za każdym razem, gdy prezenter umieszcza dane w widoku, musi wywołać metodę Aktualizacji w widoku, aby wymusić ponowne wiązanie.Nie jest to potrzebne w powyższych przykładach, ale nie musisz zarządzać tabelą sesji. Nie jestem pewien, w jaki sposób to podejście komplikuje testowanie z użyciem narzędzi szyderczych.

0

Porada polega na łączeniu wszystkich materiałów eksploatacyjnych. To sprawia, że ​​prezenter i model są łatwiejsze do przetestowania z kpiną i skupiają się na testach zachowania.

Powiązane problemy