Der findes flere måde at gøre dette på, men måske du bør overveje om du ikke har et designproblem? Løser du det eksempelvis istedet med et observer pattern skal listen kun opdateres når der er sket noget nyt.
Det er rigtigt, at man kan løse mange problemer med et observer pattern, men der kan jo også sagtens være situationer hvor det ikke løser det. Afspejling af en tabel i en database vil være svær at implementere med et observerpattern :)
Det kan du have ret i! Men i forhold til Martin Fowlers trelagsmodel er det nu alligevel ikke helt ved siden af. Afspejling af en tabel er intet problem i den sammenhæng.
Det er et problem i den forstand, at en database ikke kan afgive events, og på den måde ved du ikke hvornår der skal opdateres. At du så kan lægge ansvaret længere ned i dine lag, ændrer ikke på, at der skal være en timer et sted der læser nyeste informationer fra databasen.
Det vil jeg nu ikke give dig ret i. Den løsning du beskriver minder om brug af en statisk variabel hvor databasen, istedet for et domænelag, er det centrale i programmet.
det jeg skal opdatere er en JList med en række elementer hvor der er beregnet tid tilbage før de er "Færdige"... defor ville det jo være rart at den opdaterede sig selv med jævne mellemrum istedet for en opdater kanp for at se den korrekte tilbage tid
Du kan da ikke ændre på, at du bliver nødt til at tjekke for ændringer i databasen. Og det har intet at gøre med at bruge databasen som det centrale fremfor et domænelag. Hvis du læser hvad jeg skriver, så er det:
Der skal et sted i systemet være en timer der tjekker for ændringer. Om du så laver denne timer i dit domænelag eller i gui'en, er afhængig af situationen. Hvis det er noget du selv kontrollerer - med det mener jeg, at det er dit eget program der fyrer events - så er jeg enig i at det pæneste er at gemme det ned i domænelaget. Men det ændrer ikke på timeren!
Du skal jo kun tjekke for ændringer hvis du har flere processer omkring samme data. Kører du det hele i én proces har du de data du skal bruge i domænelaget. Det kan eksempelvis løses med en DataMapper, se http://www.martinfowler.com/eaaCatalog/dataMapper.html
Jeg vil så også gerne vide hvorfor du mener at det er nødvendigt?
Jeg er udmærket bekendt med persistens-framework. Men de data du efterspørger behøver jo ikke nødvendigvis komme fra samme applikation. De kan eksempelvis komme fra en hjemmeside eller lignende. Og derfor ved du ikke hvornår de kommer i databasen, og kan derfor ikke handle derudfra.
Hvis det eneste din applikation skal, er at vise nogle ordrer fra en hjemmeside, så vil jeg ikke mene man skal til at lave en serverapplikation, som kan notificere dig, når der sker ændringer.
Det siger jeg heller ikke. Jeg siger det ikke er nødvendigt ved mindre applikationer. Så skal du selv til at hoste den server, for du kan ikke køre den på almindelige webhoteller.
Så det jeg siger (igen): Så afhænger det meget af hvad formålet med ens applikation er. Jeg vil til hver en tid foretrække at lave den store pæne client/server løsning, men omstændighederne er mange gange sådan, at det ikke kan lade sig gøre.
Hvis man har valgmuligheden så er det altid godt at have noget fælles server kode som kan notify'e hvis data ændres.
Men nogen gange er det ikke muligt. Data opdateres af en 25 år gammel Cobol applikation. Data opdateres af en applikation som ejes af en anden afdeling. Nogen gange har man visse ting givet udefra/ovenfra.
To tekniske detaljer: 1) Visse database understøtter stored procedures i Java. Jeg har aldrig prøvet men principielt må man kunne lave en INSERT/UPDATE/DELETE trigger som kalder en SP i Java som notifyer client apps. 2) Observer pattern er ret simpelt at implementere one process og multi process one node, men multi node kan nemt give en del ekstra arbejde.
takker endnu engang for hjælpen og undskyld navne forvækslingen.
og sikke i kan fortsætte med at være enige i at være uenige ;O)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.