Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Struts Wiki" for change 
notification.

The following page has been changed by CraigMcClanahan:
http://wiki.apache.org/struts/RoughSpots

------------------------------------------------------------------------------
      * [plightbo] Related to this, I would encourage us to try to find a 
solution (using Bob's mix-in suggestion below, or possibly just taking 
advantage of the value stack) that would make ActionSupport much simpler. This 
would encourage using POJOs more.
      * [mrdon] Regardless whether we remove Action or not, I like the idea of 
moving the result constants out.  
      * [tfenne] I think removing Action would be a bad idea. If you're going 
to try and get away from requiring XML configuration or listing out all your 
Actions somewhere, you'll probably want to have someway of discovering your 
Actions. An interface is the easiest option - an annotation would do too, but 
would feel a little stranger I think.
+     * [craigmcc] You can actually have this one both ways, as we do in Shale 
-- define an Action interface for
+       the JDK 1.4 users, and provide an optional JavaSE 5 layer that lets you 
define the appropriate callbacks
+       with annotations instead.  For a detailed example, take a look at how 
Shale's "Tiger Extensions" package
+       lets you get the functionality of a ViewController interface without 
having to say "implements
+       ViewController" in your action class.
  
    1. Only put classes in root package that most users need to know about. For 
example, most don't need to know about `Default*` or `ObjectFactory`.
      * [plightbo] +1 on this - sounds like Bob has a good handle on what it 
takes to make a nice API. I'll defer to him on this.
      * [mrdon] +1
+     * [craigmcc] In Shale, I adopted the convention of package 
"org.apache.shale.foo" for public APIs, and
+       "org.apache.shale.foo.impl" for things like default implemetnation 
classes.  However, there is an additional
+       subtlety here to take into account -- there is a difference between 
APIs that application developers should
+       depend on versus those extending the framework should be allowed to 
extend.  The latter category of folks
+       can be presumed to be smaller, as well as more willing to deal with 
occastional API breakages.
  
    1. Only make classes/members public if we're willing to guarantee future 
compatibility. Everything else should be package-private or excluded from the 
Javadocs.
    
@@ -35, +45 @@

      * [mrdon] This I don't agree with.  From a framework developer, I 
understand the logic, but from a user, it is arrogant.  I think we should allow 
people to extend Struts in ways we haven't imagined, and restricting access 
like this says, "We know more than you and will force you to do it our way."
      * [crazybob] I don't think we should make everything final or anything, 
but I do think we should differentiate between the published API and the 
implementation through package organization, excluding stuff from the Javadocs, 
etc. Users can know that we won't change the published API out from under them, 
but that if they depend on implementation classes, we may break them 
(reluctantly). It's the polite thing to do, and it frees us up to refactor and 
improve our implementation.
      * [jcarreira] +1 published public vs. private APIs are a good thing, and 
a contract with the user of what can change. 
+     * [craigmcc] See comments on the previous bullet related to APIs that 
application developers use versus those
+       who are extending the framework might use.
  
    1. Remove `destroy()` and `init()` from `Interceptor`. They don't make much 
sense until the interceptor lifecycle is specified (see next item). I've never 
needed them, yet it's a pain to implement empty methods every time I implement 
an interceptor. Users can use the constructor/finalizer or we can create 
additional lifecycle interfaces.
  
@@ -68, +80 @@

      * [mrdon] This I'd like to see.  I've found myself using these objects so 
often in wierd little places, I'd be loath to remove them unless we could prove 
100% that their information can be retrieved elsewhere.
      * [jcarreira] +1 to Patrick's point... we may need to introduce some more 
advanced *Aware interfaces, though, to give people access to the guts if they 
really want it.
      * [frankz] !ActionContext being !ThreadLocal was one of the first "cool" 
things I noticed about WW.  I'd hate to see that change.  The only thing I can 
think of that would make me agree to change that is that I think we may find 
developers using it in "inappropriate" ways, i.e., an Action calls a business 
delegate and the delegate uses !ActionContext.  My bet is most people would 
agree it should be a "best practice" to not do that.  Still, it's cool that you 
can!
+     * [craigmcc] JSF likes the thread local approach to a per-request context 
object (FacesContext in this case)
+       too.  One of the really nice benefits is simplifying parameter 
signatures to methods that *might* need
+       access to the context state, but not necessarily.  The counter-example, 
of course, is the Struts signature
+       for Action.perform().  Two more comments separated out because they 
address separate issues.
+     * [craigmcc] Regarding Frank's concern about potential "inappropriate" 
changes ... if you design an API that
+       passes a particular interface in to a method, and then expects that 
method to pass the same interface along,
+       you are in exactly the same boat.  The Servlet API considers this a 
feature rather than a bug, because a
+       Filter can actually wrap the incoming request and response objects to 
provide extra functionality -- this
+       at least wouldn't be possible in the case of a thread-local state 
object.
+     * [craigmcc] "Interceptors need access to the servlet API" -- doesn't 
anyone care about making it possible
+       to write applications that work for portlets too?  I would hope that we 
all work towards a world where
+       direct access to the underlying servlet API objects is considered an 
anti-pattern.
  
    1. Is `ValidationAware` a good name? Perhaps `Errors` or `ErrorList` would 
be a better name.
  

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

Reply via email to