# from David Golden
# on Tuesday 29 June 2010 13:17:

>>... and each appender can be individually toggled on or off ...
>> ... whether I want the issue detected at compile time or run time I
>> suppose, but is generally frowned upon to put imports down inside
>> class methods?
>
>I tend to think about it like this:
>
>(a) Mandatory for operation?  Load it at compile time.
>(b) Optional and almost always loaded in normal operation?  Load it at
>  compile time.
>(c) Optional and only needed some of the time?  Load it at runtime
>  if/when needed.

(d) Significant chunks of code enabled?  Package each one separately
   with its tests, and compile-time dependencies declared in each dist.

So, you have an X, which can use the X::screen, X::email, X::foo 
plugins / modes / polymorphic functors (or whatever you want to call 
them.)  Installing X by itself either does "nothing interesting" or 
just some very basic functionality beyond loading the PFs, then each 
X-foo dist requires X and the 'foo::whatever' modules.

Then, just `require X::email` whenever needed by the config / usage.

This will ensure that you've got test coverage on your ::foo.  
Otherwise, if 'foo::whatever' happens to get installed after X and 
enabled at runtime, you're in a situation where your tests have never 
run through that code and the user is going to find any bugs or API 
incompatibilities the hard way.

--Eric
-- 
"But as to modern architecture, let us drop it and let us take
modernistic out and shoot it at sunrise."
--F.L. Wright
---------------------------------------------------
    http://scratchcomputing.com
---------------------------------------------------

Reply via email to