in reply to Re: Best way to 'add modules' to web app?
in thread Best way to 'add modules' to web app?

The idea of providing easily over-rideable methods that would allow the 'client' to easily change functionality is basically what I was going for. However, I'm having a problem conceptualizing exactly how you tell the program that you over rode a sub method. From your example, if I write a Forum::Format module, then all my code dealing with it looks like: my $ff=new Forum::Format;. If someone doesn't like part of it and wants to inherit and over ride that sub, say his new module is Forum::Format::NoHtml how does he tell my application that it should be using this New and Improved class/object instead of the regular old Forum::Format
  • Comment on Re: Re: Best way to 'add modules' to web app?

Replies are listed 'Best First'.
Re: Re: Re: Best way to 'add modules' to web app?
by chunlou (Curate) on Jul 05, 2003 at 16:19 UTC
    The problem sounds more like a functional programming one (where you focus on evaluating "expression")than OOP one. I don't think inheritance (though it might not what you really meant) it's necessarily good for customization and even less for flexibility. It leads to too tight a coupling.

    OOP is a good way to deal with design time customization. At runtime, or so you could think, it's another story. Think about a calculator. It evaluates arbitrary expression at runtime. It all depends on how you model the problem and/or your spec.

    As to how one might conceptualize overriding a sub, I might think of a sub a value in a hash with rules determining which key (and therefore sub) to pick, either at runtime or design time. Think about this (trivial) example:
    sub make_binary { eval "sub { $_[0] }" } my %op ; $op{add} = make_binary '$_[0] + $_[1]' ; $op{sub} = make_binary '$_[0] - $_[1]' ; $op{mul} = make_binary '$_[0] * $_[1]' ; $op{div} = make_binary '$_[0] / $_[1]' ; $op{max} = make_binary '$_[0] > $_[1] ? $_[0] : $_[1]' ; for (sort keys %op) { print "2 $_ 3 = " . $op{$_}->(2,3) . "\n"; }
    Kind of customization via "templating."
Re: Re: Re: Best way to 'add modules' to web app?
by The Mad Hatter (Priest) on Jul 05, 2003 at 16:01 UTC
    I'd explain in detail how you do this, but I'm walking out the door as I speak. Instead, take a look at the code for CGI::Kwiki and how they accomplish it. (Hint: Use a simple, global config file that contains what classes you should use.)
Re^3: Best way to 'add modules' to web app?
by adrianh (Chancellor) on Jul 05, 2003 at 21:31 UTC
    From your example, if I write a Forum::Format module, then all my code dealing with it looks like: my $ff=new Forum::Format;. If someone doesn't like part of it and wants to inherit and over ride that sub, say his new module is Forum::Format::NoHtml how does he tell my application that it should be using this New and Improved class/object instead of the regular old Forum::Format

    Don't hard code the class name. Have a factory that gives you the appropriate formatter object based on a configuration file, environment variable, mod_perl setting or whatever.

    Take a look at Class::Factory for one way of doing this.