Resamp,
One of the things we want to be careful of, when we refactor FreeMind,
is that we don't try to add a bunch of new things at the same time. The
idea behind refactoring is that you improve the code base without
altering the behavior of the program. That way, we can verify that we
haven't broken anything by comparing the behavior of the refactored code
against the original code.
That doesn't mean we can't build the design so that we can do things
like support multiple documents open at the same time, but we shouldn't
actually take advantage of that feature until after the refactoring is
complete.
Thanks,
Ray
Reasamp wrote:
Now after years of doing the right things (in sense of features) I see a
chance to get the things right and easy (in sense of design). As you
see, the most important idea of the proposed design is a concept of
independent extension packages implementing independent map and node
properties and seamlessly integrated into the framework.
Yes, this is the part of all major changes as I can see. But, didn't get
the time to go very thoroughly into this yet, so I'll have more to say
later; but to start with, where are you drawing the line between an
"extension", and just a "visitable" object? What "visitable" objects are
you thinking other than "extensions"?
* Seems ApplicationController can have only one instance of
FreeMindContainer. Maybe we could share one ApplicationController over
many FreeMindController, [...] Might help a few synchronization
problems between user preferences [...]
I like your idea. Although it is beyond the pure refactoring, we could
keep it in mind and implement it later, may be after the refactoring is
finished.
Are you planning to go into a refactoring phase before this new design is
implemented? Because I think small things like these can often create an
extremely buggy solution if implemented later on, and I dont want to see
this project get there. Whatever we decide, I prefer to have that decision
early on and then stick with it from the very onset. I'd prefer if we
either decide to disable multiple windows/application instances altogether
(that would be simpler to do), or we decide to fully support it (what I'd
personally prefer) from the very point we start coding by this design.
* FreeMindContainer#isApplet() - [...] a similar but more genericmethod
could be added here as well,
isOfType(String). I know this is basically the same as invoking
reflection
on 'this', but for the sake of completeness it feels like it might have
a place here.
[...] Let us remove
this method for now.
Removing wasn't exactly what I meant, but yes, let's see what we actually
need.
Could be done later.
I can remove both ModeController#getActiveMap() and
ModeController#getActiveMapView(), because they rather belong to the
ApplicationController (and they are already present there).
O, ok ... I somehow still can't find it in ApplicationController. Could
you give me the exact method name?
* Usually, the close() method of a resource comes with the class
representing that resource. [...] (like File objects have a close
method, NOT a System.close(File) method). So it seems more intuitive to
me
that Map create/load/save/close methods should be in the MindMap class.
[...] I know this would probably mean they simply wrap the
corresponding calls in a ModeController, but it reduces the need for a
ModeController object to be exposed in areas where it could be treated
as
an implementation details hidden inside a MindMap, simplifying codes.
I am not sure whether the MindMaps containing the model should be
provided with strategies of how those models are created, loaded or
saved. [...]
Right :-) Actually I realized this part when I was done writing the first
half, so I went on to add the 2nd half saying that such calls in MindMaps
should probably just wrap the ones provided by ModeController.
Although redundant, I see it's value as clarifying the API. I mean if I
want to create new maps, or load them, I'd probably go looking for them in
the MindMap class. Similarly, if I want to save a map, a map.save call
would make a lot of sense. But something like
map.getModeController().save(this) would mean I'd have to go through
ModeController API, and nothing in the MindMap method list would tell me
that something by the name of 'getModeController' would actually let me
save this map. And even then I would be unsure about calling it, since I
wouldn't know if this was in fact the right method or is it supposed to be
an internal method meant to be called by some other method "really" meant
for the saving purpose. At least this *is* the kind of problem I first
faced a few days back when I joined in this project. Just a few wrappers
providing a more conventional interface would have made things easier on
me.
Reasamp
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Freemind-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freemind-developer
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Freemind-developer mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freemind-developer