To me, the presentation tier's main responsibility is to mediate
between the user and business layer. Validation, forwarding, etc --
that's presentation tier logic that my business tier objects don't
care about (usually). From the business tier's perspective, the meat
is in the conversion between HTTP strings to/from business objects,
and the call to the correct business tier class/method.
In most cases, a simple BeanUtils.copyProperties() (or equivalent)
call is enough to convert between user input and business layer data.
Even if there was more to it than that (multiple objects/types, nested
objects, etc), I still consider that presentation tier conversion. In
your example, I would probably extract multiple sets of data and then
call the business tier object and pass those. I may do the extraction
in the action, or I may use a util class that gets called by the
action, but the point is, the business tier objects only work with
business tier objects:
int someId = // retrieve id from form
MyPojo myPojo = // populate pojo from data in form
myServiceLayerObject.someBusinessProcess(someId,myPojo);
Hubert
On 7/12/05, Rick Reumann <[EMAIL PROTECTED]> wrote:
> I was just replying to a post about keeping your Actions clean and doing
> the business logic in other classes.
>
> One thing I didn't bring up, though, because I'm not sure how 'best
> practice' it is, is the concept of passing your ActionForm and sometimes
> the HttpServletRequest off to another class for some processing. I'm
> doing that a bit in this app I'm currently working on and I'm liking it.
>
> Here are my thoughts. Typically I've dones this kind of stuff in my
> dispatch Action methods....
>
> SomeForm sForm = (SomeForm)form;
> //some validation now possibly
> SomeVO vo = new SomeVO();
> BeanUtils.copyProperties( vo, form );
> service.update( vo );
> //save some success message or error message
>
> The above is quite simple but sometimes there are some other things that
> have to be done that aren't alway orthodox... ie, maybe having to
> build more than one VO from a form, or maybe some logic looking at
> certain form/request parameters to dictate some slightly altered service
> class method to call. All of this stuff tends to staring bloat the
> Action class which is supposed to mainly be a controller. I've started
> now playing around with pushing some of this off to another class and
> the Action then becomes mostly just responsible for 1) validation 2)
> saving any success or error messages 3) fowarding
>
> So what happens is the Action looks like...
>
> //EmployeeAction
> execute(...) or dispatchmethod() {
> EmployeForm empForm = (EmployeeForm)form;
> //validate form, if success proceed..
> boolean success = EmployeeActionHelper.updateEmployee( empForm,
> request );
> //messages set up based on success or failure
> }
>
> The above hides all the mundane copy form properties to vo and any other
> logic (for example if returning a List you could put that in scope in
> the Helper).
>
> Possibly all of this is overkill, but it came about based on a real use
> case. The situation is when CRUD operations are selected from the form,
> the type of Value Object created and the type of Service that gets
> called is based on a requirement passed in by the form. What gets done
> when the form is submitted can be very different based on the type of
> object being represented when the form submits, so I needed a way to get
> a unique type of Service/Delegate base on the ID. I found it clean to
> isolate all of this from the Action, so the Action method looks like...
>
> update(..) {
> MyForm myForm = (MyForm)form;
> ServiceFactory.getService( myForm.getTypeID ).update( myForm );
> //other stuff
>
> Now since the correct Service is obtained, it can do the copying of
> proeprties to the unique value object and can call the approrpriate DAO
> that is in that service class.
>
> Anyway, I'm just babbling:)
>
> --
> Rick
>
> ---------------------------------------------------------------------
> 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]