2011-12-09 64 views
1

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

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

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

我知道它的一个很大的问题要阅读。但感谢您的时间和提前回复。

回答

1
  1. 如果有在目的或他们作用于,它们可以组合成具有多个处理程序方法的类类似的行动/条件。例如,所有对用户起作用的servlet都可以合并到一个类中。是否合理取决于我们没有的信息。

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

它确实看起来像你完全重新发明了一个已经发明了很多次的车轮。考虑使用现有的框架还是简化现有的代码:不要使多个servlet处理条件,而是尽可能从servlet规范中分离到命令处理程序。

如果您正在寻找简单易用的解决方案,像Bear's Front Man就是一个薄而可爱的图层,可以消除很多复杂性和噪音。像Guice Servlets这样的东西允许依赖注入没有一个完整的Spring/etc。叠加。


的类处理特定的URL(或“命令” - 看不到任何command pattern文档)不需要真实的servlet;他们可以是通用类。

他们可能是小服务程序 - 但是与servlet规范的耦合越松,越容易测试和扩展。从一个URL到一个“command”可以像在地图中查找一个命令,实例化适当的类,传递各种工件(例如请求和会话参数)以及调用一个方法一样简单实现。从某种意义上说,每个框架最终都会在某种程度上像这样工作。

+0

非常感谢您的回答。您提供的链接肯定会有所帮助。但是,您能否详细介绍一下您提到的处理程序方法?条件处理程序方法的一个简单示例? – Djpatel99

+0

@ Djpatel99当然;看到更新的答案。 –

+0

完美! :D非常感谢您的回答。我现在有一个很好的方向。 – Djpatel99

0

这只是一个意见,但:

  1. 我会成为负责一个资源每个servlet。所以对于用户,组,预订,地点,不同的servlet,但是对于用户列表和用户编辑表单来说,它们是相同的servlet。
  2. 通常你需要一层('服务')来使你的'DAO'成为一个DAO。服务层负责您的业务逻辑,DAO只从数据库和控制器插入/更新/检索记录准备要查看或由服务层处理的数据。您的servlet负责处理发送到服务器的数据。未处理的数据不会离开servlet层。
  3. 迁移到一些MVC框架(Spring?)。它会让你的生活更轻松。
+0

我肯定会喜欢迁移到框架的想法。但系统现在正在运行。而且要求越来越高。所以我认为稍微清理一下代码并使其具有可管理性将有助于吸收更多的需求,并在扩展系统的同时提供更多的功能。但是当我找到一个时间段的时候,我肯定会转向一些框架。我想就如何有经验的人处理这种维护设计不当的系统的情况提出意见。 – Djpatel99