you might want to look up some of the materials presented as arguments
under:  "design by responsibility", and David Parnas original writings
on cohesion and coupling (i.e. his 1972 paper) -- I think Wikipedia
entry on him gives a fairly good, generic overview w/ links.  For
design by responsibility, look up Rebecca Wirfs-Brock, and CRC.

- Yarko

On May 5, 2:18 pm, cjrh <[email protected]> wrote:
> On May 4, 1:26 pm, canna <[email protected]> wrote:
>
> > so how would you share functions between controllers easily? without
> > passing global objects to the functions all the time?
>
> Functions in a module should really only have access to identifiers
> and namespaces within that module; hence passing "db" as an argument.
> However, if, inside the function, assumptions are made about the
> existence or validity of specific tables and fields, then it is
> probably better that the function be declared in the same place as
> "db", which would be in the model file.   If possible, perhaps the
> best alternative is to write the module in such a way that no
> specifics about the db are needed, and then the function can be
> imported into the model file.  This is sometimes possible, for
> instance, your function inside the module could take another function
> as an argument, and in the model file, you import and use the model
> function by passing your db-specific function in.
>
> FWIW the fact that web2py controllers have access to a pre-initialized
> namespace for things like "db", "session" and so on is something of an
> exception, and indeed supporters of other python frameworks sometimes
> paint that in a negative light.  I think it the web2py way is a net
> positive (due to convenience), but different people weight things
> differently.  The global object instances in web2py models and
> controllers should really be considered as a specific, intentional,
> useful exception to the rule, not a recommended way of doing things in
> the general case.

Reply via email to