----- "Oliver Uvman" <oliver.uvman(a)gmail.com> a écrit :
> Matthieu: Yes, that would be the push-type mechanism. The problem
> about it then is that the backend would have to know when a gui is
> running or not, and be able to send messages to that gui (keeping
> some
> address reference to it or whatever). I'd rather not touch the
> backend
> code at all, as that would muddy the waters for the people who are
> looking at the first large lisp app in their lives.
The thing is, even if the :after methods I was talking about are
"attached" to backend generic functions, I consider that they
belong to the GUI code, so the backend code doesn't have to
maintain information about the GUI. Something like this:
(in-package :app-gui)
(defun draw-foo (object)
...)
(defmethod app-backend:set-coords :after ((object foo) x y)
(when *application-frame*
(draw-foo object)))
That way, the backend code doesn't depend on the GUI code.
If you group those :after methods in a separate file, you could
even choose to load it or not, depending on whether you want to
allow direct modifications of backend data (which should be
reflected in the GUI).
> Maybe I should also note that this is the first time the students
> meet
> layered abstraction, so the app so far has a strict top-down
> dependency model. Code in one layer may not depend on code in a layer
> above it. Preferably I'd like to keep the gui in a layer of its own,
> above all other layers. This would keep things simple for the
> students, they'd never need to look in the gui code (if they don't
> want to).
>
> /Oliver
>
> On Tue, Jul 13, 2010 at 16:01, <matthieu.villeneuve(a)free.fr> wrote:
> > Hello,
> >
> > ----- "Oliver Uvman" <oliver.uvman(a)gmail.com> a écrit :
> >> The problem I know I will eventually run into is updating the Clim
> >> interface when changes to data have been made through manual
> >> interaction with the backend. The solutions are either push or
> pull
> >> based, I guess. Push based is not really prefered, because the
> backend
> >> would have to keep track of the gui so it can send messages to it.
> >
> > [Disclaimer: I don't remember much about GUIs and CLIM...]
> >
> > Couldn't you define, as part of your GUI code, and for every
> "relevant"
> > backend method that updates the application data, an :after method
> that
> > updates or refreshes the interface contents?
--
Matthieu Villeneuve