Reinhard Poetz wrote:

Answer: It depends on the order of declaring your scripts in <map:flow/>. The first helper() method declared will be found.



But there is only one helper() method per block!?


Yes. Therefore we need something more sohpisticated than imports.

I'm having a hard time following this conversation, as it seems to me that this is another instance of something that is becoming an anti-pattern: "stating the solution before stating the problem".


The problem is that you want to use some functionality defined in another block.

Fair enough, since that's what blocks are: isolated service providers.

One of the design decisions with blocks is that *NO FILE* will ever be exposed by the blocks directly.

There is practically no way in the world you are going to change my mind on that, so consider it a permanent -1 for a block to expose direct file access.

Blocks *may* expose their sitemap pipelines but nobody said that they couldn't expose flow functions too (which are the flow equivalent of sitemap pipelines)

Now, blocks have different composition patterns:

 - dependency
 - extension

the two will, IMO, result in different ways of composing flow functions.

Dependency can make available, either implicity or explicitly thru a cocoon.importDependencies() the block's dependencies.

Since javascript has no notion of "private/public" for functions, we could specify that functions that start with _ are "private", while the other ones are "public". Or something like that.

For extension, we could have automatic overload, so that if block A has flow with function blah() and block B extends block A with function blah() you can do

 block b:
  blah() {
   cocoon.super()
   print "blah b"
  }

 block a:
  blah() {
   print "blah a"
  }

if block b extends block a, calling blah() on b will result in

 blah a
 blah b

There is *NO* need for direct file access and there is *NO* need for namespaces in javascript.

I understand the above might not be easy to implement, but implementation difficulty should *never* drive design decisions.

--
Stefano.



Reply via email to