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

08-08-18 maybe723
结构:

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()

{

}

}

         

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

banq
2008-08-19 09:31
>Com.news.action:Action(接口),AddNews, DeleteNews.ModifyNews

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

maybe723
2008-09-18 13:15
>>初步识别是命令模式,有现成的框架可用,不必自己操心选择动作等等

当然.在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修改过]

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

猜你喜欢