Please do not top-post. (Order corrected.)
>>> Im looking for an opinion regarding best practices. Recently a friend
>>> and I were talking about how we write our code for our web
[quoted text clipped - 21 lines]
>>> catch (SQLException E) {
>>> }
There is an advantage and a disadvantage to the DAO approach. The advantage is
that it decouples data storage logic from business-rule logic. The
disadvantage is that it somewhat increases the up-front programming effort.
Decoupling data storage allows portability to other data storage schemes
(switching from JDBC to JNDI or a Web service, for example). It allows passing
of data entity value objects around without keeping a connection open. Passing
back non-Cached RowSets or ResultSets requires an active connection.
In a data-access-object (DAO) layer approach, the DAO objects accept and pass
back entities or collections, not ResultSets. There is no consciousness by the
clients of that layer that a Connection or a ResultSet or Statement exists.
dnass wrote:
>> You should have a look at MVC model.
>>
>> And for the code you've written I would have wrote it this way :
>> Connection Conn = null;
>> Statement Stmt = null;
>> ResultSet RS = null;
You dcn't actually need the extra initialization of these variables. Also, it
is conventional to name variables with a lower-case first letter, to
distinguish them from class identifiers.
>> try {
>> Conn =
[quoted text clipped - 19 lines]
>> }
>> catch(Exception ex){}
In real life one would likely want to log this exception. Also, some suggest
that one should not catch "kitchen_sink" exceptions.
>> RS = null;
>> try{
>> RS.close();
This would throw a NullPointerException.
>> }
>> catch(Exception ex){}
[quoted text clipped - 8 lines]
>> because if you have an exception while executing the query
>> with your source code you'll never close your connection.
> I believe I have been implement an MVC design in the apps I've been
> writing. My understanding is that with MVC I would have a "model" of
> my data (just a plain javabean),
It doesn't actually *have* to be a JavaBean, since model classes are primarily
behavioral and not really value objects. They likely will have some
attributes, though, so in that sense they are likely to follow bean accessor
patterns.
> Im using JDBC in a servlet
In the MVC pattern there would be no servlet directly accessing JDBC. That
would be done through a model class or a DAO class.
> to fill my bean and do whatever processign logic needs done, this being the
> "controller".
The controller is supposed to handle only parsing a request, its dispatch to
model logic, then navigation to the subsequent view. All other logic happens
in the model.
> Im then, stuffing that into a request or session
> attribute and sending to a jsp "view".
Stuffing what "that"? The logic object? The logic object is primarily
behavioral and should not reside as a session or request attribute. It may,
however, determine via business rules that some value object or collection
thereof should be "stuffing" for the request or session (or wherever).
> I guess this still leaves me confused about whether or not I should be
> handling my data access form the servlet the way I have been.
The servlet really should not be the one to talk to the data store directly,
in nearly all these architectures. That is a job left to the model.
- Lew
javerra - 07 Feb 2007 21:20 GMT
> Please do not top-post. (Order corrected.)
>
[quoted text clipped - 130 lines]
>
> - Lew
Thank you for the detailed response. Its a lot clearer now and I see
some coding habits I have will have to change.