mp has asked for the wisdom of the Perl Monks concerning the following question:
The proposed change would be to write ClassTwo and modify ClassOne:package ClassOne; sub new { my ($class, %args) = @_; #... my $data = $class->load_a_bunch_of_data($arg{one}); return bless $data, $class; } use ClassThreeList; sub load_a_bunch_of_data { my ($class, $arg1) = @_; # load a bunch of data that only ClassOne cares about # ... # load a list of data that both ClassOne # and ClassTwo care about. my $item_list = ClassThreeList->load_where(objectlistid => $arg1); foreach my $item (@$item_list) { ### BEGIN CODE THAT I WANT TO SHARE ### $item->load_attr1_list; $item->load_attr2_list; $item->calculate_some_attribute. $item->etc; ### END CODE THAT I WANT TO SHARE ### } } # ClassTwo does not exist yet.
package ClassOne; sub new { my ($class, %args) = @_; #... my $data = $class->load_a_bunch_of_data($arg{one}); return $data, $class; } use ClassThreeList; sub load_a_bunch_of_data { my ($class, $arg1) = @_; # load a bunch of data that only ClassOne cares about # ... # load a list of data that both ClassOne # and ClassTwo care about. my $item_list = ClassThreeList->load_where(objectlistid => $arg1); foreach my $item (@$item_list) { $class->shared_class_method_one( $item ); } } sub shared_class_method_one { my ($class, $item) = @_; $item->load_attr1_list; $item->load_attr2_list; $item->calculate_some_attribute. $item->etc; } package ClassTwo; use ClassOne; sub new { #... } sub new_method_that_needed_shared_code { my ($class, $arg1) = @_; my $item = ClassThree->load(objectid => $arg1); ClassOne->shared_class_method_one($item); ####### LINE IN QUESTION # +####### }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: OOP - Sharing class methods
by lachoy (Parson) on Aug 14, 2002 at 18:50 UTC | |
by mp (Deacon) on Aug 14, 2002 at 19:09 UTC | |
|
Re: OOP - Sharing class methods
by dreadpiratepeter (Priest) on Aug 14, 2002 at 18:43 UTC | |
by perrin (Chancellor) on Aug 14, 2002 at 18:52 UTC | |
by pdcawley (Hermit) on Aug 15, 2002 at 13:42 UTC | |
by perrin (Chancellor) on Aug 15, 2002 at 17:45 UTC | |
by pdcawley (Hermit) on Aug 15, 2002 at 21:41 UTC | |
|