两种设计方式哪种更好一些?

结构:
Com.news.dao: NewsDAO
Com.news.dao.impl: NewsDAOImpl
Com.news.dto: News
Com.news.service : NewsService
Com.news.servlet: AddNews,DeleteNews.ModifyNews

public class NewsService
{
private NewsDao newsDAO=new NewsDAOImpl();
public boolean addNews(News news) {
…..
}
}
public class AddNewsServlet extends HttpServlet {
{
……
NewsService nservice = new NewsService();
}

另一种结构
Com.news.dao : NewsDAO
Com.news.impl : NewsDAOImpl
Com.news.dto : News
Com.news.action:Action(接口),AddNews, DeleteNews.ModifyNews
Com.news.servlet
这种方式在com.news.action中有一个接口及相应的动作
public interface Action
{
public execute(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException;
}
public class AddNews implements Action
{
Public execute(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException
{
……
}
}

在serlet的处理中是根据传进来的参数来选择动作
Dopost(…)
{
String action= request.getParameter(“action”);
Action a=null;
if(“add”.equals(action))
{
A=AddNews();
a. execute(..);
}
Else if()
{

}
}

初步识别是命令模式,有现成的框架可用,不必自己操心选择动作等等

>Com.news.action:Action(接口),AddNews, DeleteNews.ModifyNews
当然第一种架构了,第二种架构违反分层原则,Action是MVC的Controller,是Mediator模式,是用来进行前后调度的,是一个通讯类,不要在Action所在表现层做太多无关界面显示的事情,这样会导致业务核心倾斜,最后导致业务空巢,回到过去的delphi两层架构。

>>初步识别是命令模式,有现成的框架可用,不必自己操心选择动作等等
当然.在Struts中,一个action通过实现DispatchAction来选择相应的动作,HttpServlet何尝不是这样.可现在用的是serlvet嘛

to bang:

对于第一种情况:就一个表的SUID而言就产生四个servlet,n张表的话,最少也有n*4个servlet,这样岂不是很耗资源?
对于第二种情况:如果我们把Action接口稍微改动一下,返回值为 String :
public interface Action
{
public String execute(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException;
}
那么这样通过在实现类中来指定跳转的页面:
public class AddNews implements Action
{
public String execute(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException
{
……

return "a.jsp"; //或是newServlet?type=list
}
}

在servlet中通过返回的String 来识别跳转,这样一来会少很多的servlet,用Action和Servlet来进行Controller么?
不对之处请指正!
[该贴被maybe723于2008-09-18 13:15修改过]

banq说的很清楚了,你违反了分层原则,不要把return里面加入*.jsp之类的东西,表现层的东西就是表现层来做。推荐使用第一种方法,而且最好不要new对象,而是用factory的方式。