Any of the patterns described in the recent "Core J2EE Patterns" should
work well with Struts. In fact, many of these have already been
implemented for you by the framework ;-)

The three patterns that Struts developers may use most would be Data
Access Objects, Value Objects, and Helper Objects. The classical trinity
is to have a Data Access Object return a Value Object, which is wrapped
in a Helper Object and sent to the presentation layer. 

In my projects, I use standard method calls to my Data Access Objects,
like 

    public static final int scriptInsert(
            int script, byte image, String title, String article
        ) throws AccessException {
       return
scriptCommand(script,image,title,article,Commands.SCRIPT_INSERT);
    }

Where scriptCommand is a library function shared by Insert and Update.
The implementation here uses standard JDBC things like
PreparedStatements.
Though, I could change all that without affecting anything else. (Hence,
the custom AccessException instead of SQL Exception.) 

The retrieval commands return RowSets 

    public static final RowSet scriptSelect(int key) throws SQLException
{
       return RowSets.getRow(key,Commands.SCRIPT_SELECT);
    }

which I use as Value objects. RowSets are handy even if you are using
something else in the implementation. Since RowSets can be created from
scratch or from a ResultSet, they make an excellent value object. 

You could also pass the RowSet directly to the presentation layer, and
use the Struts logic:iterate and bean:write to access the column by
number. 

        <bean:write name="ROW" property="object[3]"/>

You can also use the Jakarta Tablib dbTags with disconnected rowsets. I
just submitted the patch, and it may not be available in the nightly
build yet, but you can get the updated JAR from More About Struts. 

< http://husted.com/about/struts/resources.htm#new >

Here you just place the RowSet into Request context and tell the
resultSet tag its name.

        <db:resultSet id="ROW" name="ROWS">

and then you can use the dbTag getColumn tag to refer to columns by name 

        <db:getColumn colName="title"/>

See the Jarkata dbTag docs for more about getColumn and friends.

Some other Struts design stategies I would recommend are 

* Document all entry points with global forwards (no "page=" parameters)
* Use more mappings to minimize the use of hidden fields and query
strings
* Use the parameter property to document each operation of an Action
* Use one Action for related operations
* Use one ActionForm for related forms
* Subclass Action and ActionServlet as needed for better code reuse
* Use directory matching for ActionServlet (/do/* instead of *.do)

-- Ted Husted, Husted dot Com, Fairport NY USA.
-- Custom Software ~ Technical Services.
-- Tel 716 737-3463.
-- http://www.husted.com/about/struts/

> Jerzy Kawa wrote:
> 
> Hello all,
> Any comments about struts design pattern ?

Reply via email to