Wzorzec MVP jak szybko ugryźć

486 wyświetleń
Przejdź do pierwszej nieodczytanej wiadomości

Krzysztof Nielepkowicz

nieprzeczytany,
16 lis 2011, 07:36:0816.11.2011
do warsza...@googlegroups.com
Więc,

dziś, rychło w czas, zainteresowałem się wzorcem MVP, który to często
pojawia się w kontekście jak pisać aplikacje w GWT. Po szybkim
googlowaniu natrafiłem na ciekawą dyskucję z przykładem :
http://forum.4programmers.net/C_i_.NET/171908-winforms_wzorzec_mvp_-_moje_boje
, może jednak ktoś z was ma ciekawsze i lepsze linki ;)

Pozdrawiam,
Krzysiek

Piotr Ostrowski

nieprzeczytany,
16 lis 2011, 07:41:2116.11.2011
do warsza...@googlegroups.com
Jeśli chcesz użyć MVP w kontekście aplikacji GWT, polecam zapoznanie się z
Activities and Places [1], które to weszło w GWT 2.1 właśnie w celu
wspomagania pisania aplikacji według wzorca MVP. Ciekawą alternatywą jest
GWTP [2] tworzone przez niezależnych programistów, może nawet bardziej
rozbudowane i łatwiejsze w użyciu niż Activities and Places. Oba
rozwiązania wspierają też obsługę historii w przeglądarce.


[1]
http://code.google.com/intl/pl-PL/webtoolkit/doc/latest/DevGuideMvpActivitiesAndPlaces.html
[2] http://code.google.com/p/gwt-platform/


Dnia 16-11-2011 o 13:36:08 Krzysztof Nielepkowicz
<k.p.niel...@gmail.com> napisał(a):


--
Piotr Ostrowski
http://yuppy.pl

splatch

nieprzeczytany,
16 lis 2011, 08:03:4516.11.2011
do Warszawa Java User Group (Warszawa JUG)
Polecam mały projekt o nazwie mvp4g. Jest w nim kilka dość dobrych
rozwiązań np wsparcie dla event bus oraz (sic!) hierarchię aplikacji
(są moduły, moduły mają event busy). Radzi sobie również z historią.
Większość rzeczy załatwia się adnotacjami.

Wykorzystałem ten projekt przy 2 projektach i nie było z nim wielu
problemów. Developerzy są pomocni i szybko reagują na feature
requesty.

Pozdrawiam,
Łukasz

On Nov 16, 1:41 pm, "Piotr Ostrowski" <yu...@avd.pl> wrote:
> Jeśli chcesz użyć MVP w kontekście aplikacji GWT, polecam zapoznanie się z
> Activities and Places [1], które to weszło w GWT 2.1 właśnie w celu
> wspomagania pisania aplikacji według wzorca MVP. Ciekawą alternatywą jest
> GWTP [2] tworzone przez niezależnych programistów, może nawet bardziej
> rozbudowane i łatwiejsze w użyciu niż Activities and Places. Oba
> rozwiązania wspierają też obsługę historii w przeglądarce.
>
> [1]  http://code.google.com/intl/pl-PL/webtoolkit/doc/latest/DevGuideMvpAc...
> [2]http://code.google.com/p/gwt-platform/
>
> Dnia 16-11-2011 o 13:36:08 Krzysztof Nielepkowicz
> <k.p.nielepkow...@gmail.com> napisał(a):
>
> > Więc,
>
> > dziś, rychło w czas, zainteresowałem się wzorcem MVP, który to często
> > pojawia się w kontekście jak pisać aplikacje w GWT. Po szybkim
> > googlowaniu natrafiłem na ciekawą dyskucję z przykładem :
> >http://forum.4programmers.net/C_i_.NET/171908-winforms_wzorzec_mvp_-_...

Krzysztof Nielepkowicz

nieprzeczytany,
16 lis 2011, 08:54:4216.11.2011
do warsza...@googlegroups.com
Dzi�ki wam :) oba projekty na pierwszy rzut oka s� nie�le udokumentowane
co daje na pocz�tku dobrego boosta w poznawaniu :)
> Polecam ma�y projekt o nazwie mvp4g. Jest w nim kilka do�� dobrych
> rozwi�za� np wsparcie dla event bus oraz (sic!) hierarchi� aplikacji
> (s� modu�y, modu�y maj� event busy). Radzi sobie r�wnie� z histori�.
> Wi�kszo�� rzeczy za�atwia si� adnotacjami.
>
> Wykorzysta�em ten projekt przy 2 projektach i nie by�o z nim wielu
> problem�w. Developerzy s� pomocni i szybko reaguj� na feature
> requesty.
>
> Pozdrawiam,
> �ukasz

>
> On Nov 16, 1:41 pm, "Piotr Ostrowski"<yu...@avd.pl> wrote:
>> Je�li chcesz u�y� MVP w kontek�cie aplikacji GWT, polecam zapoznanie si� z
>> Activities and Places [1], kt�re to wesz�o w GWT 2.1 w�a�nie w celu
>> wspomagania pisania aplikacji wed�ug wzorca MVP. Ciekaw� alternatyw� jest
>> GWTP [2] tworzone przez niezale�nych programist�w, mo�e nawet bardziej
>> rozbudowane i �atwiejsze w u�yciu ni� Activities and Places. Oba
>> rozwi�zania wspieraj� te� obs�ug� historii w przegl�darce.>> <k.p.nielepkow...@gmail.com> napisa�(a):
>>
>>> Wi�c,
>>> dzi�, rych�o w czas, zainteresowa�em si� wzorcem MVP, kt�ry to cz�sto
>>> pojawia si� w kontek�cie jak pisa� aplikacje w GWT. Po szybkim
>>> googlowaniu natrafi�em na ciekaw� dyskucj� z przyk�adem :
>>> http://forum.4programmers.net/C_i_.NET/171908-winforms_wzorzec_mvp_-_...
>>> , mo�e jednak kto� z was ma ciekawsze i lepsze linki ;)

Piotr Ostrowski

nieprzeczytany,
16 lis 2011, 09:04:4716.11.2011
do warsza...@googlegroups.com
Mimo wszystko na początku polecam zapoznać się z Activities and Places.
Już nie raz przejechałem się na dodatkowych bibliotekach, które przestały
być uaktualniane po wydaniu kolejnych GWT'a. W przypadku Activities and
Places mamy tą pewność, że mechanizm będzie uaktualniany i integrowany z
resztą ficzerów, jak chociażby RequestFactory czy GWT Editors.


Dnia 16-11-2011 o 14:54:42 Krzysztof Nielepkowicz
<k.p.niel...@gmail.com> napisał(a):

> Dzięki wam :) oba projekty na pierwszy rzut oka są nieźle udokumentowane
> co daje na początku dobrego boosta w poznawaniu :)
>> Polecam mały projekt o nazwie mvp4g. Jest w nim kilka dość dobrych


>> rozwiązań np wsparcie dla event bus oraz (sic!) hierarchię aplikacji
>> (są moduły, moduły mają event busy). Radzi sobie również z historią.
>> Większość rzeczy załatwia się adnotacjami.
>>
>> Wykorzystałem ten projekt przy 2 projektach i nie było z nim wielu
>> problemów. Developerzy są pomocni i szybko reagują na feature
>> requesty.
>>
>> Pozdrawiam,
>> Łukasz
>>

>> On Nov 16, 1:41 pm, "Piotr Ostrowski"<yu...@avd.pl> wrote:

>>> Jeśli chcesz użyć MVP w kontekście aplikacji GWT, polecam zapoznanie

>>> się z
>>> Activities and Places [1], które to weszło w GWT 2.1 właśnie w celu


>>> wspomagania pisania aplikacji według wzorca MVP. Ciekawą alternatywą

>>> jest


>>> GWTP [2] tworzone przez niezależnych programistów, może nawet bardziej
>>> rozbudowane i łatwiejsze w użyciu niż Activities and Places. Oba
>>> rozwiązania wspierają też obsługę historii w przeglądarce.
>>>

>>> [1]
>>> http://code.google.com/intl/pl-PL/webtoolkit/doc/latest/DevGuideMvpAc...
>>> [2]http://code.google.com/p/gwt-platform/
>>>
>>> Dnia 16-11-2011 o 13:36:08 Krzysztof Nielepkowicz

>>> <k.p.nielepkow...@gmail.com> napisał(a):
>>>
>>>> Więc,
>>>> dziś, rychło w czas, zainteresowałem się wzorcem MVP, który to często

>>>> pojawia się w kontekście jak pisać aplikacje w GWT. Po szybkim


>>>> googlowaniu natrafiłem na ciekawą dyskucję z przykładem :
>>>> http://forum.4programmers.net/C_i_.NET/171908-winforms_wzorzec_mvp_-_...

>>>> , może jednak ktoś z was ma ciekawsze i lepsze linki ;)


>>>> Pozdrawiam,
>>>> Krzysiek
>>> --
>>> Piotr Ostrowskihttp://yuppy.pl
>

Irek Matysiewicz

nieprzeczytany,
16 lis 2011, 11:13:3916.11.2011
do warsza...@googlegroups.com
Swego używałem mvp4g w projekcie GWT-owym i byłem niezadowolony. Po jakimś czasie event bus staje się workiem do którego wrzucane są wszystkie eventy w aplikacji (czy module), co potem utrudnia utrzymanie kodu. Do tego to całe programowanie na adnotacjach... Jak na mnie to mvp4g i tym podobne frameworki to przerost formy nad treścią.

@Krzysiek
Ja na twoim miejscu bym próbował użyć wzorca Presentation Model (znany też jako Model View ViewModel). Zapewnia wszystko co MVP czy MVC, a jest dużo bardziej naturalny i ułatwia testowanie. Jest mniej popularny niż MVP czy MVC bo stał się znany dopiero za sprawą Adobe Flex, Windows Presentation Foundation czy JavaFX, ale z powodzeniem można go stosować i w uboższych narzędziach, np. GWT. Managed beany czy backing beany z JSF to też coś bardzo podobnego do tego wzorca, więc jeśli kiedykolwiek pisałeś coś w JSF to poczujesz się jak w domu.

Jakub Nabrdalik

nieprzeczytany,
16 lis 2011, 12:40:2516.11.2011
do warsza...@googlegroups.com
W dniu 16.11.2011 17:13, Irek Matysiewicz pisze:

> @Krzysiek
> Ja na twoim miejscu bym próbował użyć wzorca Presentation Model (znany
> też jako Model View ViewModel).

Bardzo fajna dokumentacja (czytelna) tego wzorca jest tu:
http://msdn.microsoft.com/en-us/library/gg405484%28v=PandP.40%29.aspx


--
Jakub Nabrdalik
http://solidcraft.eu

splatch

nieprzeczytany,
16 lis 2011, 12:42:0216.11.2011
do Warszawa Java User Group (Warszawa JUG)
Irek,
Rolą event busa jest przesyłanie zdarzeń, więc to że wraz z rozrostem
aplikacji przybywa eventów jest naturalne. Twoje odczucia są w tym
przypadku bardzo subiektywne. Wyobrażasz sobie aplikację "pseudo"
desktopową bez szyny zdarzeń? Ja od kiedy zacząłem z niej korzystać
już nie.
Sam również nie jestem fanem adnotacji, ale uważam, że przerostem
formy nad treścią będzie zmuszanie ludzi do korzystania z XML by
powiązać widok z prezenterem. Jakoś nikomu nie przeszkadzają adnotacje
GIN/Guice, których jest podobna ilość. :) Swoją drogą, jeśli uważasz
mvp4g jako przerost formy nad treścią to jakie rozwiązanie
alternatywne, które jest dostępne dla GWT proponujesz? Pisanie
kolejnej implementacji Model-View-cokolwiek dla jednej aplikacji
będzie skazane na klęskę.

Pozdrawiam,
Łukasz

splatch

nieprzeczytany,
16 lis 2011, 13:04:2416.11.2011
do Warszawa Java User Group (Warszawa JUG)
Piotr,
Mimo wszystko nie masz gwarancji, że google nie zrezygnuje również z
Activities and Places. Spójrz na Google Groups, kiedyś była możliwość
tworzenia stron, teraz jej nie ma. To że coś jest od google, nie
znaczy że jest wieczne. Google daje i odbiera. Mvp4g jest rozwijane od
2009 roku, czyli jak na światek open source w miarę długo, a na pewno
nie krótko. Sama idea Activities and Places jest zbieżna z mvp4g, ale
brakuje w niej obsługi zdarzeń, bo to co proponują artykuły z
dokumentacji samego GWT woła o pomstę do nieba. Stworzenie jednego
zdarzenia to - rozszerzenie klasy GwtEvent, powołanie instancji
HandlerManager bądź EventBus, stworzenie interfejsu EventHandlera, i
na końcu implementacja interfejsu. Dla każdego zdarzenia przynajmniej
1 klasa pełniąca rolę transfer objectu oraz 1 interfes. Ten obrazek
mówi sam za siebie:
http://code.google.com/webtoolkit/images/contacts-project-hierarchy.png

6 klas do zadeklarowania samych zdarzeń, nie licząc encji. Plus to, że
nie przetestujesz zachowania prezentera bez GWTTestCase (używasz
GwtEvent) który podnosi się dłużej niż goły unit test. Z mvp4g da radę
zrobić zwykłe junity. ;-)

Pozdrawiam,
Łukasz

On Nov 16, 3:04 pm, "Piotr Ostrowski" <yu...@avd.pl> wrote:
> Mimo wszystko na początku polecam zapoznać się z Activities and Places.
> Już nie raz przejechałem się na dodatkowych bibliotekach, które przestały
> być uaktualniane po wydaniu kolejnych GWT'a. W przypadku Activities and
> Places mamy tą pewność, że mechanizm będzie uaktualniany i integrowany z
> resztą ficzerów, jak chociażby RequestFactory czy GWT Editors.
>
> Dnia 16-11-2011 o 14:54:42 Krzysztof Nielepkowicz
> <k.p.nielepkow...@gmail.com> napisał(a):

Irek Matysiewicz

nieprzeczytany,
16 lis 2011, 13:23:2916.11.2011
do warsza...@googlegroups.com
Rolą event busa jest przesyłanie zdarzeń, więc to że wraz z rozrostem
aplikacji przybywa eventów jest naturalne.
Oczywiście że jest to naturalne, i bardzo fajne, bo możesz w jednym miejscu kontrolować cały przepływ komunikatów - coś a'la AOP. Jest to fajne w przypadku powiedzmy kilkunastu klas, no tyle że w każdej większej aplikacji masz duuużo więcej niż kilkanaście klas.

 
  Swoją drogą, jeśli uważasz
mvp4g jako przerost formy nad treścią to jakie rozwiązanie
alternatywne, które jest dostępne dla GWT proponujesz? Pisanie
kolejnej implementacji Model-View-cokolwiek dla jednej aplikacji
będzie skazane na klęskę.


W przypadku JavaFX / WPF / Flexa wszystko (czyli bindowanie danych) masz z pudełka. Przykładowy kod z Flexa: (może zbyt trywialny, ale dobrze obrazujący ideę)
Widok:
[Bindable]
public var albumForm : AlbumForm;
(...)
<mx:TextInput text="@{albumForm.album.artist }" />

Model i Presentation Model: (fragment)
[Bindable]
public class Album
{
    public var artist : String;
(...)

Dostajemy tu pole tekstowe, którego wartość jest pobierana z albumForm.album.artist i przy każdej zmianie tam zapisywana.


To kompilator przerabia na coś co w Javie można by było zapisać tak:
Widok.initComponent:
textInput.setText(albumForm.getAlbum().getArtist());
albumForm.getAlbum().addPropertyChangeListener("artist", new ... { textInput.setText(albumForm.getAlbum().getArtist()) })
textInput.addPropertyChangeListener("text", new ... { albumForm.getAlbum().setArtist(...) })


Model i Presentation Model:

private PropertyChangeSupport propertyChangeSupport = ...
public void addPropertyChangeListener ...
private String artist;
public String getArtist() { return artist; }
public void setArtist(String newValue) { if(newValue != artist) { artist = newValue; propertyChangeSupport.firePropertyChange(...) } }

Wystarczy klasa PropertyChangeSupport lub jej odpowiednik.
Chociaż jest tu trochę "boilerplate code" to nie jest aż taki straszny. Zdaje się, że są biblioteki do GWT co potrafią tego boilerplata ukryć - http://stackoverflow.com/questions/396786/best-data-binding-solution-for-gwt


W przypadku gdy mamy prostą aplikację webową, gdzie za każdym requestem przemalowywana jest cała strona, nawet te całe listenery nie są potrzebne - dokładnie tak działają backing beany w JSF czy jsp:useBean w JSP. Wtedy po prostu mamy zwykłe prostackie getery i setery, które w widoku są widoczne jako #{bean.cośtam}.



Irek Matysiewicz

nieprzeczytany,
16 lis 2011, 13:25:3616.11.2011
do warsza...@googlegroups.com
BTW: calość tego kodu we Flexie jest tutaj http://examples.pmwilliams.co.uk/adobeblog/presentationpatterns/presentationmodel/PresentationModel.html (kod źródłowy pod "View Source" pod prawym przyciskiem)

Paweł Cesar Sanjuan Szklarz

nieprzeczytany,
16 lis 2011, 16:20:0016.11.2011
do warsza...@googlegroups.com
Cześć

Na warsztatach z GWT na warsjawa 2011 mówiłem o MVP. Dzisiaj
skończyłem przykłady i scommitowałem:
https://github.com/paweld2/Gwt-Warsjawa-2011

W pliku README masz instrukcje jak to testować. Nie wspomniałem, ale
'gradle devMode' uruchomi devMode do debugowania.

Myślę, że najważniejsze to zmiana ze schematu "strona -> request ->
strona" na ajax. Własnie wtedy MVC przestaje mieć sens i MVP czy MVVM
są przydatne.

Jak dla mnie, to nie ważne jaki pattern użyć ale ważne jest
przygotowanie infrastruktury aplikacji, tak żeby
rozwijanie/debugowanie/refaktoring był do ogarnięcia. Nieważne że na
jedno zdarzenia trzeba 6 klas, jeżeli to jest generowane. Czy
generować?? pewnie tak jeżeli będzie tego dużo, a może nie?.

Właśnie rozważając różne kombinacje i patrząc na dobre przykłady
powstał gwt-caiman. Jak zajrzysz do środka, zobaczysz że MVP
pierwotnie wzięło się z biblioteki od David Peterson. Dużo zmieniłem,
np. zamiast EventBus dla Place-Presenter zmieniłem na pattern ala
Observer (patrz GwtTypedObservable).

Napisałeś, że chcesz szybko. Myślę, że zrozumienia idei da się szybko
zrobić, ale dopiero zabawa z żywem organizmem daje .... właśnie, co
daje?? intuicję??.

Powodzenia.
Paweł Szklarz.


2011/11/16 Krzysztof Nielepkowicz <k.p.niel...@gmail.com>:

> --
> Wiadomość z grupy Warszawa Java User Group (Warszawa JUG).
> Więcej informacji na stronie
> http://groups.google.com/group/warszawa-jug?hl=pl
> Zachęcamy do odwiedzenia naszej strony domowej http://warszawa.jug.pl
> Oferty pracy dozwolone zgodnie z zasadami na
> http://sites.google.com/site/warszawajug/oferty-pracy-na-grupie
>

Wiktor Gworek

nieprzeczytany,
16 lis 2011, 17:12:4816.11.2011
do warsza...@googlegroups.com
2011/11/16 Krzysztof Nielepkowicz <k.p.niel...@gmail.com>
Więc,

dziś, rychło w czas, zainteresowałem się wzorcem MVP, który to często pojawia się w kontekście jak pisać aplikacje w GWT. Po szybkim googlowaniu natrafiłem na ciekawą dyskucję z przykładem : http://forum.4programmers.net/C_i_.NET/171908-winforms_wzorzec_mvp_-_moje_boje , może jednak ktoś z was ma ciekawsze i lepsze linki ;)

Google IO: Best Practices for Architecting GWT App -- http://www.youtube.com/watch?v=PDuhR18-EdM

Irek Matysiewicz

nieprzeczytany,
17 lis 2011, 03:14:3717.11.2011
do warsza...@googlegroups.com

Myślę, że najważniejsze to zmiana ze schematu "strona -> request ->
strona" na ajax. Własnie wtedy MVC przestaje mieć sens i MVP czy MVVM
są przydatne.

Jeśli weźmiemy MVP w wersji klasycznej bez żadnych urozmaiceń (np. http://blog.vuscode.com/malovicn/archive/2007/11/04/model-view-presenter-mvp-design-pattern-close-look-part-2-passive-view.aspx ), to główna różnica między MVP a MVVM jest mała: w MVP "kontroler" komunikuje się z widokiem za pomocą wzorca Strategia a w MVVM - Observerów (o ile w ogóle potrzebne).

Ale ta mała różnica pozwala na łatwe bindowanie danych, także w obie strony:
Flex: <mx:TextInput text="@{obiekt.geter}" />
JSF: <h:inputText value="#{obiekt.geter}" />
GWT + http://code.google.com/p/gwt-pectin/ : binder.bind(obiekt.geter).to(kontrolka)

Tak łatwo i czytelnie nie zrobisz tego z MVP, o MVC nie spominając.

Sławek Sobótka

nieprzeczytany,
17 lis 2011, 16:27:0117.11.2011
do Warszawa Java User Group (Warszawa JUG)
> Myślę, że najważniejsze to zmiana ze schematu "strona -> request ->
> strona" na ajax. Własnie wtedy MVC przestaje mieć sens i MVP czy MVVM
> są przydatne.
> ...
> Napisałeś, że chcesz szybko. Myślę, że zrozumienia idei da się szybko
> zrobić, ale dopiero zabawa z żywem organizmem daje .... właśnie, co
> daje?? intuicję??.

świetnie ująłeś obie myśli...
imo daje to głębsze zrozumienie, a co za tym idzie świadomość i
wreszcie intuicję jaką zaprezentowałeś wyżej.


@Irek
Celna uwaga... heh słoneczni chłopacy pewnie nawet nie wiedzieli, że
już dawno temu w JSF odkryli MVVM i wciskali wszystkim, że mają MVC
(wówczas była na to moda ale MVC w JSF jest do... yyy do niczego nie
podobne)


Sławek Sobótka
http://art-of-software.blogspot.com/

Krzysztof Nielepkowicz

nieprzeczytany,
18 lis 2011, 06:15:1018.11.2011
do warsza...@googlegroups.com
On 2011-11-17 22:27, S�awek Sob�tka wrote:
>> Napisa�e�, �e chcesz szybko. My�l�, �e zrozumienia idei da si� szybko
>> > zrobi�, ale dopiero zabawa z �ywem organizmem daje .... w�a�nie, co
>> > daje?? intuicjďż˝??.
> �wietnie uj��e� obie my�li...
> imo daje to g��bsze zrozumienie, a co za tym idzie �wiadomo�� i
> wreszcie intuicj� jak� zaprezentowa�e� wy�ej.
No w�a�nie - rozpracowuje na szybko by mie� co pokaza� kierownikowi
projektu, alternatyw� jest kolejny frontend dla bankowc�w jako aplikacja
standalone :| bardzo chcia�bym pou�ywa� tego w praktyce by mie� chocia�
namiastk� tego wyczucia co wy - co b�dzie to czas poka�e ;)
Odpowiedz wszystkim
Odpowiedz autorowi
Przekaż
Nowe wiadomości: 0