My design preference for things like this (as is playing out in Struts 1.3) is to define a single scoped bean which can contain any references like this, so as to sharply minimize the need for constants like this. If you do that, then you're down to a single constant to use to retrieve that bean, and then everything else can be retrieved via strongly typed accessors, which plays nice with IDE autocompletion and tools like that.

This Globals class defines request and session-scoped keys -- one could debate whether Ti should have beans for each, or whether, like Struts 1.3 (and the HTTP Servlet API), one can assume that a request always has a reference to its corresponding session.

Assuming that you don't want to abstract away the essential request/response nature of webapps, it's easy enough to make a RequestContext (which would be much like the Struts 1.3 ActionContext) and give this class the responsibility for managing attributes which are important to the framework but which also need to be exposed in various runtime scopes.

Then, this constant would only need to be defined on a bridge class that has the responsibility for guiding things from the controller realm to the view realm. I'm not sure whether Ti has any such yet (or what it would be if it doesn't) but the constant represents a contract with the view layer (you'll find these resources *here*), so it shouldn't be considered global. The framework itself shouldn't need globals, for the same reasons we don't use maps when we can use JavaBeans.

I think that lack of encapsulation (lots of direct access to request and session via constants) in Struts is one of its weakest points, making it hard to test and hard to refactor, so I'd hate to see Ti make the same mistakes...

Joe




At 9:00 PM -0600 8/30/05, Rich Feit wrote:
It's transitional -- not necessarily for back-compat. I should have commented it as such. In Beehive, we were using these four constants that Struts defined for storing errors, exceptions, locale, etc. I think it's something we need to work out -- do we want to keep storing these things in attributes with well-known names? If not, the Globals class can go away -- replaced by internal constants and APIs. I'd be in favor of that, but I didn't want to make a unilateral decision.

The use of these attributes isn't tied to the Servlet API, though -- we set them through the WebContext abstraction.

I'll put an @todo on this class in my next patch.

Rich

James Mitchell wrote:

So, while working on the shale build, I'm multitasking over to Ti and looking through some of the code there.

The first thing that strikes me as odd is o.a.t.Globals.

I mean, I thought one of the goals was to completely abstract any underlying api (servlet/portlet). Am I misunderstanding this? Or is this for backward compatibility?



--
James Mitchell
Software Engineer / Open Source Evangelist
Consulting / Mentoring / Freelance
EdgeTech, Inc.
http://www.edgetechservices.net/
678.910.8017
AIM:   jmitchtx
Yahoo: jmitchtx
MSN:   [EMAIL PROTECTED]
Skype: callto://jmitchtx





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


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


--
Joe Germuska [EMAIL PROTECTED] http://blog.germuska.com "Narrow minds are weapons made for mass destruction" -The Ex

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

Reply via email to