|
| Et spørgsmål om design Fra : Peter |
Dato : 16-04-03 10:34 |
|
Jeg har lavet en applikation som søger efter nogle data. Det ser ud som
følger:
|GUI| --> |Controller| --> |SpecifikSøg| --> |DataHåndtering|
Det jeg har ivist ovenfor skal forstille et klassediagram. Hvor jeg har en
GUI en Controller til denne GUI som tager sig af alt actioncontroll,
derefter har jeg en bestemt søgning, som bruger en klasse DataHåndtering til
at behandle de fundne data.
I klassen DataHåndtering har nogle oplysninger som gerne skal vises i GUI'en
efterhånden som de findes.
Men hvordan laver jeg det pænest? Jeg har lavet det ved atv sende en
reference til GUI med helt over til DataHåndtering, men det se bare ikke
særlig pænt ud. Er der nogen som har et bedre forslag?
| |
Peter Lind (16-04-2003)
| Kommentar Fra : Peter Lind |
Dato : 16-04-03 15:41 |
|
"Peter" <dj_pnr@hotmail.com> wrote in message
news:3e9d23a0@news.wineasy.se...
> Jeg har lavet en applikation som søger efter nogle data. Det ser ud som
> følger:
>
> |GUI| --> |Controller| --> |SpecifikSøg| --> |DataHåndtering|
>
> Det jeg har ivist ovenfor skal forstille et klassediagram. Hvor jeg har en
> GUI en Controller til denne GUI som tager sig af alt actioncontroll,
> derefter har jeg en bestemt søgning, som bruger en klasse DataHåndtering
til
> at behandle de fundne data.
>
> I klassen DataHåndtering har nogle oplysninger som gerne skal vises i
GUI'en
> efterhånden som de findes.
>
> Men hvordan laver jeg det pænest?
Hmm...
Det mest rigtige vil vel være at bruge et observer-pattern. GUI tingen
observerer DataHåndteringen, og får at vide når der sker ændringer.
Rent praktisk skal GUI'en implementere en art propertyChangeListener (kan
være en standard bean ting, eller du kan lave din helt egen. Den skal have
mindst en metode, nemlig propertyChanged( ).
GUI skal så registrere sig selv ved DataHåndteringen, altså kalde en
addPropertyChangeListener( GUI ) metode i DataHåndtering, inden hele
systemet sættes i sving. Det kræver selvfølgelig at GUI skal kende
DataHåndtering inden SpecifikSøg er sat igang...
Så, måske er du nødt til at lave et lidt mere rigtigt MVC
(Model-View-Controller) pattern, hvor du i controller'en, opretter både GUI
(View) og en eller anden DataModel (måske din DataHåndtering, måske en
enklere udgave - du kender måske ideen fra JTable og dens TableModel.)
Når controlleren opretter View og Model, så registrerer den også View som en
listener på propertyChanges i Model'en. Og når der skal laves en søgning, så
får SpecifikSøg og DataHåndtering (hvad det så end er) en reference til
modellen med, så de ved at data skal fyldes ind i den.
Det lyder vist lidt forvirrende, men jeg er ikke helt klar hvor meget du
kender til disse patterns, og det er også lidt lang tid siden jeg selv har
lavet noget ved dem.
Men ideerne kan også sagtens bruges i forbindelse med dit andet spørgsmål,
om JTables, som jeg svarer på om lidt.
mvh
Peter Lind
| |
Lars Dam (16-04-2003)
| Kommentar Fra : Lars Dam |
Dato : 16-04-03 15:52 |
|
On 16 Apr 2003 10:34:25 +0100
"Peter" <dj_pnr@hotmail.com> wrote:
> Jeg har lavet en applikation som søger efter nogle data. Det ser ud som
> følger:
>
> |GUI| --> |Controller| --> |SpecifikSøg| --> |DataHåndtering|
>
> Det jeg har ivist ovenfor skal forstille et klassediagram. Hvor jeg har en
> GUI en Controller til denne GUI som tager sig af alt actioncontroll,
> derefter har jeg en bestemt søgning, som bruger en klasse DataHåndtering til
> at behandle de fundne data.
>
> I klassen DataHåndtering har nogle oplysninger som gerne skal vises i GUI'en
> efterhånden som de findes.
>
> Men hvordan laver jeg det pænest? Jeg har lavet det ved atv sende en
> reference til GUI med helt over til DataHåndtering, men det se bare ikke
> særlig pænt ud. Er der nogen som har et bedre forslag?
Brug noget publish subscribe mekansime (der kører en tråd om observer pattern - noget i den stil).
Dvs. at hver gang din data håndtering ændrer tilstand, så skal den sende en besked til alle 'subscribers'. Disse reagerer så på disse events.
Du kan så lade din controller være subscriber og når den får en event, så opdaterer den gui.
vh. ld
| |
|
|