So when you are describing objects that receive parameters, you are
looking along the lines of a transaction? If so, you usually want to
interface out the transaction object so you can possibly change the
language later-- take a look at OJB for example. They have the base
persistence broker layer which works with queries at the object/method
level. Then, OJB provides another overhead layer you can opt to use
that provides JDO where queries are done like SQL statements, but with
EL-like markup.
Usually I treat DAO's from the socialist standpoint. Meaning, you have
a few big classes, then a bunch of tiny ones that are just state beans
(your row gateways).
Persistence is taken care of by one of the big classes that knows how
each bean is mapped/handled. The big class also takes in Query objects
that internally, will spit out SQL code based on the big class's
mappings -- I think the pattern may be Strategy/Visitor.
public List selectAll(Query query) throws DAOException
{
// have the query build sql based on my mappings
String sqlCode = query.buildSql(this.getSchemaDescriptor());
List results = new LinkedList();
Connection conn = null;
try
{
conn = this.getConnection();
.....
}
catch (SQLException e) {....}
finally { conn.close(); }
return results;
}
If your schema is complex enough that you want to do additional checking
before querying, you may want to write an additional step where the
query outputs a set of criteria or an descriptor object that you can do
validation on, instead of letting the query object go hog-wild and
create it's own SQL code. So the above example becomes:
QueryDescriptor qDesc =
query.getQueryDescriptor(this.getSchemaDescriptor());
if (this.validateQueryDescriptor(qDesc))
{
.....
}
Also, I noticed that you brought up Connections in your description; I
wouldn't advise giving your "beans" any connections. Really, your beans
should know nothing of persistence or SQL, which should all be taken
care of by a 3rd party class.
-Jacob Hookom
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>