MVC设计混乱

时间:2011-12-09 15:53:42

标签: java web-applications servlets

我现在在一个小型预订网站上工作。并且该站点有一个单独的servlet,带有一个大的if-else块,大约有85个条件将请求重定向到适当的jsp。同一个servlet包含一些业务逻辑。该servlet直接调用数据访问对象。这些数据访问对象也有一些业务逻辑。因此,业务逻辑在servlet和DAO之间共享。我有两个困惑。

1)servlet是一种反模式。因此,我试图将其缩小并将其划分为多个servlet,以便每个servlet都具有某种特定的用途。我的问题是我应该为每个条件制作一个servlet。那会产生85个不同的servlet。

2)DAO和servlet之间应该有多少层。我在考虑两个,因为我需要一个层将特定于Web前端的输入转换为通用请求。第二层将处理通用请求并在需要时调用DAO。因此,如果我们决定制作移动应用程序的话。我们只需要对移动前端进行一层特定的请求处理,然后将其转换为通用请求。但这导致重复的代码。我在一层和两层之间有点困惑。

我知道这是一个很重要的问题。但感谢您的时间和提前回复。

2 个答案:

答案 0 :(得分:1)

  1. 如果存在目的相似的行为/条件或它们的行为,它们可以组合成具有多个处理程序方法的类。例如,作用于用户的所有servlet可以组合成一个类。这是否有意义取决于我们没有的信息。

  2. 应该多少层?不知道。通常,至少有一个服务层。服务将DAO功能聚合到事务单元中。条件处理程序管理Web层和业务层之间的接口。

  3. 看起来你确实已经完全重新发明了已经多次发明过的车轮。考虑使用现有框架或简化现有代码:而不是使多个servlet处理条件,尽可能从servlet规范中解析为命令处理程序。

    如果你的目标是昙花一现,像Bear's Front Man这样的东西是一层薄而可爱的层,可以消除很多复杂性和噪音。像Guice Servlets之类的东西允许依赖注入而没有完整的Spring / etc。叠加。


    处理特定URL(或“命令” - 请参阅任何command pattern文档)的类不需要是实际的servlet;它们可以是通用类。

    他们可能是servlet - 但是与你拥有的servlet规范的耦合越松散,就越容易测试和扩展。

    从URL获取“命令”可以像在地图中查找命令,实例化相应的类,传递各种工件(例如,请求和会话参数)以及在实现中调用方法一样简单。从某种意义上说,每个框架最终都会在某种程度上像这样工作。

答案 1 :(得分:0)

这只是一个意见,但是:

  1. 我会让每个servlet负责一个资源。因此,用户,组,预订,地点,以及用户列表和用户编辑表单的相同servlet都有不同的servlet。
  2. 一般来说,你需要一层('服务')才能让'DAO'成为DAO。服务层负责您的业务逻辑,DAO仅插入/更新/检索来自DB的记录,控制器准备要由服务层查看或处理的数据。您的servlet负责处理发送到服务器的数据。未处理的数据不会离开servlet层。
  3. 迁移到某个MVC框架(Spring?)。它会让你的生活更轻松。
相关问题