Re: Shlomif's Tenth Law of Perl OOP and Test-Run

[email protected] (Stevan Little)
Newsgroups perl.moose
Message-ID <[email protected]>
Shlomi,

On May 8, 2008, at 3:41 PM, Shlomi Fish wrote:
> Hi all!
>
> Shlomif's Tenth Law of Perl OOP: "Every sufficiently complex  
> Class::Accessor
> program contains contains an ad hoc, informally-specified, bug- 
> ridden, slow
> implementation of half of Moose."

Very nice, I like that quote, if you don't mind I will likely include  
it in the YAPC::NA talk I am gonna give.

Skimming over your code, I think you could save a lot of code by  
moving to Moose, and using some MooseX:: (specifically  
MooseX::AttribtueHelpers, MooseX::Object::Pluggable, and likely a few  
more too).

You will find, as others who are porting other Class::Accessor code  
to Moose, that there are some Class::Accessor-isms that conflict with  
Moose-isms so be watchful during the port.  Otherwise, i think you  
will find you can clean up your code pretty well using Moose :)

- Stevan

> (see http://en.wikipedia.org/wiki/Greenspun's_Tenth_Rule ).
>
> I used Class::Accessor for Test-Run ( see
> http://freshmeat.net/projects/test-run/ ), because that's what I  
> was used to
> using, and found the easiest solution, but ended up implementing a  
> lot of
> extra Object Orientation logic (and not-so-OO logic) in Test-Run- 
> Base and in
> other classes, and wonder if I can use Moose (possibly with some  
> extra MooseX
> plugins, to replace it. I can possibly write some of my own plugins.
>
> Here goes. The files in question are at:
>
> http://xrl.us/bka2c - Test::Run::Base:
>
> # Contains an abstraction above Text::Sprintf::Named, that allows a  
> class to
> format strings using Python-like "%(attribute)s" escapes. Useful as a
> mini-templating language. I might mostly ditch it completely in  
> favour of
> Template Toolkit.
>
> In turn I maintain a set of compiled formatters as an object-based  
> property,
> and can format according them.
>
> # Has a silly copy_from() method to copy a list of attributes from  
> another
> object using the accessors.
>
> #  accum_array():
>
> <<<<<<<<<<<
> This is a more simplistic version of the :CUMULATIVE functionality
> in Class::Std. It was done to make sure that one can collect all the
> members of array refs out of methods defined in each class into one  
> big
> array ref, that can later be used.
>>>>>>>>>>>>
>
> # $self->_run_sequence(\@params)
>
> <<<<<<<<<<<<
> Runs the sequence of commands specified using
> C<_calc__${calling_sub}__callbacks> while passing @params to
> each one. Generates a list of all the callbacks return values.
>>>>>>>>>>>>>
>
> # package->delegate_methods($field, \@methods)
>
> I think this would be trivial to do using Moose.
>
> # http://xrl.us/bka67 - Test::Run::Base::Struct
>
> These are classes whose constructors (the ->new() subroutines) can  
> only be
> passed proper pre-defined fields. It's very hacky and ad-hoc at the  
> moment,
> so I'm open for better Moose-based solutions.
>
> # http://xrl.us/bkba3 - Test::Run::Base::Plugger
> # http://xrl.us/bkba5 - Test::Run::Base::PlugHelpers
>
> Two plugin-abstractions. For more information see:
>
> http://use.perl.org/~Shlomi+Fish/journal/33492
>
> I also have some other OO and other abstractions stuff there spread  
> around the
> code, but I think that's the main thing.
>
> I'd appreciate any pointers to how I can implement these things  
> using Moose so
> I can convert Test-Run to it.
>
> Regards,
>
> 	Shlomi Fish
>
> -----------------------------------------------------------------
> Shlomi Fish       http://www.shlomifish.org/
> The Case for File Swapping - http://xrl.us/bjn7i
>
> The bad thing about hardware is that it sometimes work and  
> sometimes doesn't.
> The good thing about software is that it's consistent: it always  
> does not
> work, and it always does not work in exactly the same way.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.