Ovidiu Predescu wrote:

[lots of good stuff removed]

> In a perfect world,
> XSP should have only one logicsheet, the JXPath logicsheet. There
> should be no other things in an XSP page that put logic in the page
> (read View), instead of the Model. If you don't like XSP, and prefer to
> use JSP or Velocity, the JXPath logicsheet equivalents should be
> implemented.

I keep having the impression that using Velocity as the view layer will
be the best choice for a number of reasons. In case you have a few spare
cycles, please consider investing them there.

> Basic usage
> ===========
> 
> As hinted in the previous section, an application using Cocoon's MVC
> approach is composed of three layers:
> 
> - a JavaScript controller which implements the interaction with the
> client
> 
> - the business logic model which implements your application

One comment on this part: I would remove the 'static' part from
UserRegistry. I know this is just an example of use, but it would be
*much* more useful to show a patter of use of the technology that could
be adopted in other realms and if we suggest to get a hold on java
objects via getting a static reference, we are simply dooming our users
to a land of despair and pain later on.

> - the XSP pages, which describe the content of the pages, and XSLT
> stylesheets which describe the look of the content.

Question: in the flow layer you are calling 'login.html' and this
automagically becomes an html page after the execution of the XSP page
and a XSLT transformation. But where is this set?

This is very important: the concepts of sitemap and flowscripts were
defined *exactly* to allow somebody to *understand* what's going on
simply by looking at these central blueprints of your webapp. If
something is made implicit (like the login.xsp -> login.html resource
generation) we are totally loosing he concept up front. If a *.html
matching pipeline is inherited from a sitemap above, the examples should
make it explicit. Instead, if the XSP -> HTML pipeline has been somewhat
hardcoded in the flow engine, *PLEASE*, consider removing it alltogether
in favor of something more explicit.

> The thing I'm going to work on next is a user feedback for
> documentation which uses this MVC pattern. Jeff Turner and I are
> planning to use this system as the documentation system for Anteater.
> For this I want to use OJB (http://jakarta.apache.org/ojb/) to map
> database tables to Java objects, so I can implement a clean Model
> layer. This is a more realistic example, which will hopefully showcase
> the ease of use of this MVC approach.
> 
> Future plans include writing a WikiWiki application and a Weblog tool
> using the same patterns. I think these would be real killer
> applications for Cocoon with MVC.
> 
> As usually, I appreciate any comments and feedback you have on the
> above.

The above is *very* cool and exiting, but I still have a few comments on
the sitemap-flowscript integration which, IMO, should be solved before
making a 2.1 release.

1) if the flow interpretation is part of the sitemap semantics, don't
you think that having a flow interpreter as a component is using the
'overcomponentization' anti-pattern?

I think so. The flow interpreter is not a sitemap component, but an
avalon component. This means that its declaration should *NOT* reside on
<map:components> but somewhere on cocoon.xconf.

This makes the user have a stronger perception of integration between
the sitemaps (URIs) and the flows (transitions between URIs)

2) is the 'flow' really a <map:resource>?

I don't think so. A flow is a flow. This calls for a more explicit:

 <map:flows default-language="javascript">
  <map:flow name="prefs" src="prefs.js"/>
  <map:flow name="something-else" src="something.scm"
language="scheme"/>
 </map:flows>

which allows:

 - to declare more scripts (this eases aggregation of different webapps,
will be useful for blocks)
 - to map them to different interpreting engines based on their
language.

3) are <map:call> and <map:continue> semantically correct?

I'm not really sure. I personally like them but there is a semantic
conflict between the use of <map:call> to call a resource but I don't
think this is so confusing because, in fact, both indicate a jump into
another point of the webapp.

But if we can have more than one flow, we have to explicitly identify
which one we want to call.

 <map:call flow="prefs" function="login"/>

where it's evident that if the sitemap has only one flowscript declared,
the call falls implicitly on that one. 

I have no problems for <map:continue with="...">: I also think that
needing to explicitate the continuation-passing URI gives some more
awareness of the 'magic' behind the thing which might be a steeper
learning curve for new users, but might result in a more confortable
plateaux of use later. Which follows Cocoon's style.

Ok, I'd like to hear your comments before asking for a vote on the
change of the sitemap markup to accomodate the issues I outlined above.

-- 
Stefano Mazzocchi                               <[EMAIL PROTECTED]>
--------------------------------------------------------------------



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, email: [EMAIL PROTECTED]

Reply via email to