🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #13867

Re: Czy observer ma prawo zablokować zmianę stanu obserwowanego obiektu ?

#13867
From: Filip Sielimowicz
Date: Thu, 02 Feb 2006 20:27
79 lines
4133 bytes
Użytkownik "a1" <a1@no.spam> napisał w wiadomości 
news:drpqhk$2o8$2@inews.gazeta.pl...
> Sektor van Skijlen wrote:
> > Dnia Tue, 31 Jan 2006 14:19:45 +0100, Filip Sielimowicz skrobie:
>
> > Wygląda na to, że można.
> >
> >   Known Uses
> >
> > Smalltalk Model/View/Controller (MVC). User interface framework while
> Model is
> > subject and View is observer.
>
> > Skoro za pomocą widoku można aktualizować model, to znaczy, że
> Observer może
> > ingerować w model.
>
> Tylko ze widok nie powinnien aktualizowac modelu do tego sluzy kontroler.
>
> Do OP
> Np. javie dosyc szeroko sa stosowane VetoableListenery, i mechanizm 
> calkiem dobrze sie sprawdza. W koncu Dessign Patterns to nie biblia i nie 
> jest koniecznym literalne trzymanie sie przedstawionych konceptow.

Ja się właśnie zastanawiam, czy kilku spraw, które dotąd nazywałem
listenerami nie zacząć nazywać observerami (w zasadzie już doszedłem do 
wniosku,
że warto). Listenery nie realizują dokładnie tego, co jest zapisane we 
wzorcu
observer, bo wiele z nich ma np. kilka metod dla różnych zdarzeń zamiast
jednej metody update (np MouseListener, WindowListener). Ale za to wzorzec
jest bardziej zrozumiały i lepiej porządkuje nazewnictwo. Interfejsy 
listenerów
bardzo często mają nazwy pochodne od zdarzeń, które je interesują 
(ActionListener,
PropertyChangeListener), natomiast interfejsy Observerów pozostają albo na 
poziomie
ogólnym (po prostu Observer), albo są pochodną nazwy obserwowanego obiektu
(nie zdarzeń). Zaś dopiero specyficzne implementacje nazwami wchodzą w 
szczegóły
zastosowań i np. eksponują co dokładnie w obserwowanym obiekcie je 
interesuje.
Można np. zobaczyć to tu:
http://www.javaworld.com/javaworld/javatips/jw-javatip29.html

Takie podejście np. w moim wypadku skłoniło mnie do tego, by mnożące
się interfejsy listenerów jakiegoś wyjątkowo interesujacego, wiecznie 
aktywnego
obiektu (u mnie to maszyna stanów, która poza stanami ma jeszcze kilka 
innych rzeczy,
np. cykl życia z następujacymi po sobie fazami, wywołuje funkcje biznesowe, 
w ramach
których są otwierane i zamykane transakcje itp) schować za jednym zwartym 
interfejsem
Observera z licznymi metodami odpowiadajacymi zmianom stanów, zmianom faz 
życia,
zmianom stanów transakcji bd itp).

Ma to tę zaletę, że rzadko kto obserwujacy taki złożony obiekt jest 
nastawiony
na nasłuch tylko jednego zdarzenia - zazwyczaj interesuje go ich kilka. 
Zamiast
wiec implementować wiele listenerów implementujemy jeden interfejs 
observera.
Zmiana właściwie jest kosmetyczna - ale dużo bardziej zwarta na diagramach 
np.
diagramach klas, gdzie mamy jeden observer z metodami zamiast kilku 
listenerów.
Na takim diagramie od razu widać zastosowanie konkretnego wzorca 
projektowego
bez konieczności wprowadzania dodatkowego opisu typu "ten interfejs i ten i 
ten
są observerami, a tamten już coś innego".

Ma to wadę wydajnościową, ale kwestię pominę.

-- 
Filip Sielimowicz 
Technical Details
Message-ID: <drtpuh$q44$1@news.onet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail
References: <drno5h$mq9$1@news.onet.pl> <dro798$5ma$2@kujawiak.man.lodz.pl> <drpqhk$2o8$2@inews.gazeta.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!not-for-mail
From: "Filip Sielimowicz" <sielim@poczta.onet.pl>
Newsgroups: pl.comp.objects
Subject: Re: Czy observer ma prawo zablokować zmianę
 stanu obserwowanego obiektu ?
Date: Thu, 2 Feb 2006 21:27:02 +0100
Organization: Onet.pl
Lines: 80
Message-ID: <drtpuh$q44$1@news.onet.pl>
References: <drno5h$mq9$1@news.onet.pl> <dro798$5ma$2@kujawiak.man.lodz.pl> <drpqhk$2o8$2@inews.gazeta.pl>
NNTP-Posting-Host: host-217-172-233-228.gdynia.mm.pl
Mime-Version: 1.0
X-Trace: news.onet.pl 1138912018 26756 217.172.233.228 (2 Feb 2006 20:26:58 GMT)
X-Complaints-To: usenet@news.onet.pl
NNTP-Posting-Date: Thu, 2 Feb 2006 20:26:58 +0000 (UTC)
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.2180
X-Sender: HWuT3ZQ16+B3O4dnsZlCZgocIOkeW3FM
X-Newsreader: Microsoft Outlook Express 6.00.2900.2180
X-Priority: 3
X-MSMail-Priority: Normal
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit