Chris,
Let me chime in here with the chorus of other voices:
The use of anything that extends
mogleglue.gesture.controller.Controller definitively binds your
application to the framework in question... however, since you're
only going to be extending the MG core controller class when you're
building your own controller in a ModelGlue app, it's a moot point...
using the built-in bean injection is just using a feature of the
framework when you're building an application that uses the framework.
Where you wouldn't want any reference to the framework is actually
one tier below the controller layer... your service layer. At least
in theory, your controller talks to services and services talk to
everything else.
Allow me to expound for a moment? :D
Let's look at a psuedo-codish method you might find in an MG controller:
<cffunction name="saveUser">
<cfargument name="event" />
<cfset var UserID = event.getValue("UserID",0)>
<cfset var userName = event.getValue("userName","")>
<cfset var emailAddress = event.getValue("emailAddress","")>
<cfset var password = event.getValue("password,"")>
<cfset var result = variables.instance.userService.saveUserProfile
(UserID,userName,emailAddress,password)>
<cfif result>
<cfset event.addResult("saveSucceeded")>
<cfelse>
<cfset event.addResult("saveFailed")>
</cfif>
</cffunction>
From this we can extract a few observations and parse them into a
couple rules of thumb that I use to keep my own mind pointed in the
right direction as I develop applications (not counting laziness,
client expectations, and/or anything else that may cause me to
randomly break my own thumbs):
1) Controller methods accept an event object as their sole argument.
It contains all the data from the form and URL scopes as well as
anything injected into it via onRequestStart events (often
application constants get stuck in the event object for convenience).
2) Service-layer functions take discrete arguments relevant to
whatever objects they're dealing with... so while in this example,
saveUserProfile(userId,username,emailAddress,password) is called with
discrete arguments extracted from the event object you could (were
you to be lazy and like to take chances with your apps) call
saveUserProfile(argumentCollection=event.getAllValues()) and have
done with it.
3) What goes on in the service layer is effectively hidden from the
controller and therefore the service methods can be used to very
simply service a Flex application, an application using a different
framework, or ad-hoc code. Using ColdSpring to manage your service-
layer allows you to use AOP and provide your service layer to Flex,
AIR and AJAX applications very easily and passing discrete arguments
into service methods can make your life a lot easier sometimes.
Variation on rule 2: passing Transfer (or Reactor, or your own Model)
objects from the service thru the controller into the view makes a
good many things a great deal easier. So having userService.getUser
(userID) return a User object that's then stuffed into the event
object is fine... so your controllers can then use things like
makeEventBean() and stuff which simplifies somethings and makes
others more difficult. I actually tend to prefer this variation in
practice, but prefer the notions of the other approach in theory.
So, the goal is to make your service layer be totally independent of
any other facility, but you can use built-in features of the
framework when you're creating application code in an app that's
making use of the framework.
Did that make sense? I can always try again: words are free! ;)
Laterz,
J
On Sep 22, 2008, at 11:15 AM, Chris H wrote:
>
> just a general question, because i've just gotten into ColdSpring and
> everything related:
> it's not a good thing to use the new automatic bean injection because
> this creates another tier to the framework (which according to Briak
> Kotek and others should be avoided). it's a nice feature to have for
> easy injection, but not ideal for a true OO design, right?
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "model-glue" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/model-glue?hl=en
For more about Model-Glue, check http://www.model-glue.com .
-~----------~----~----~----~------~----~------~--~---