Santiago Basulto wrote:
> Hello everybody.
> 
> First of all, let me apologize if i'm doing something wrong. I've been
> reading the Contributors Guide and the Volunteering note
> (http://commons.apache.org/volunteering.html) wrote by Mr. Craig, then
> i decided to use this way.

Welcome to Commons!
> 
> My name is Santiago Basulto, i'm from Argentina. I've been using
> Commons Chain for a while, and has been really useful to me. It helped
> to organize my code, and make it a lot more scalable.
> 
> But, time to time, i came with some problems that Chain did not
> address. Some situations when i needed more specialization and
> robustness.
> 
> That's why i decided to extend this project, and build some other
> classes to help me out. I'm helping a teacher at my University, in an
> OOP Course, and after talking a little about it, he told me that it
> was a good idea. After that i propose         these changes to some friends,
> and tell them to try to use it. It appears like they did like it and
> started using it.
> 
> After getting some courage, i decided to write this mail. Please,
> sorry if i'm wrong. I understand that a lot of really smart people are
> working on Apache Projects, and maybe what i'm doing is a little
> stupid. So, if this is the case, please let me know.
> 
> I'll comment a little about my changes. It needs a lot of refactoring
> and documenting, but i'd like to comment the main idea behind it, so
> you can give your opinion. I have faced some problems with names. I
> did not want to rename commons.chain classes, as a matter of respect,
> so some names can seem weird, it can change.
> 
> First of all, i needed more "control" over my commands. I like to have
> everything logged, and several commands were used in GUI apps, so i
> needed more User interaction. Then, i decide to provide the main
> Interface (Command) some other methods, just to can track what is it
> doing. I made a new interface called Action (i use the other name
> given to this pattern). I extend it from Command, just becouse i
> didn't want to change everything, and can keep using my old Commands.
> 
> This new Interface, Action, has two new methods:
> 
>       void registerHandler(ActionHandler c);
> 
>       boolean removeHandler(ActionHandler c); //true if the handler was
> present, false otherwise
> 
> The main idea behind this was to have a Handler object that can track
> the "moves and states" of the Action (or Command) class. It's
> something similar to the Observer Pattern. An action "can"
> (optionally, if doesn't want to register a handler, it's a simple
> Command) register a Handler, and comunicate things about itself. So, i
> have an Interface called ActionHandler. It has three methods:
>       
>       void start(Action a);
> 
>       void done(Action a);
> 
>       void fail(Action a,Exception e);
> 
> Then, for example, the action "can" invoke start method from its
> handler, to comunicate it that has started executing. It's really
> simple, but helped me big time.
> 
> Something great about the Action Interface, is that it only sais that
> you can register a handler, not the number of handlers. So, a Class
> implementing Action can register a number of handlers (file logger
> handler, GUI tool for comunicating the user, console logger, etc) and
> inform about the progress to all of them. If it's not needed to
> comunicate, this class can just execute silently.
> 
> So, this is the main change, but with this little change i needed to
> do something with the chain. So i just made the Chain interface extend
> the Action interface. Of course, can be another class, something like
> ActionChain that implements the Action Interface, and let Chain
> untouched.
> 
> I've attached a simpler version of my source code. With just the basic
> classes and a package for test it. I've developed some other classes,
> for example, Action implementations that register several
> ActionHandlers. I'm currently working on a "BlockingQueueChain", it's
> a chain that can execute all its Commands (or Actions) in parallel.
> Obviusly, there are not so many cases when this Chain can be used. If
> someone is interested i will can send the source code.
> 
> Ok, i think that's all. Hope you can tell me if this is a good idea,
> or not. Or simply, whether i should start a new "branch" of the
> project to no interfere with Commons Chain.

What you are proposing looks to me like a good enhancement to
Commons Chain.  We can discuss class structure and naming further.
To get things going, it would be best to open a JIRA ticket and
attach your code, following the instructions here:
http://commons.apache.org/patches.html

[chain] has not been very active lately, so it may take a little
while to get responses; but please don't be discouraged by that.  We
welcome your contributions!
> 
> Thanks for this great project, and all your disinterested work.
> 
> Best Regards.
> 
> SourceCode at: 
> http://www.santiagobasulto.com.ar/projects/Actions/actions-src.rar
> 
> PS: Sorry for my english! I'm trying to improve it.

Your English is fine.  Thank YOU for your interest in Commons!

Phil


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

  • [chain] Santiago Basulto
    • Re: [chain] Phil Steitz

Reply via email to