我是否正确地使用MVC实现了n层应用程序?

时间:2009-05-22 20:18:23

标签: java model-view-controller architecture web-applications n-tier-architecture

由于对设计模式和架构非常不熟悉,我很难向其他人解释我的最新应用程序是如何设计的。我在表达层之间切换,认为它是纯粹的n层,纯MVC和带有MVC的n层。目前我认为后者是正确的,但我想要更有经验的开发人员的想法。

工作原理:

  1. 浏览器向Tomcat发送HTTP请求。将请求通过web.xml映射到servlet(我称之为控制器)
  2. 控制器实例化一个或多个业务对象并调用这些业务对象,即customerBO.getById(12),它们在调用一个或多个DAO方法之前再次执行业务逻辑/验证,即customerDAO.getById(12)。 BO将一个CustomerVO列表返回给控制器
  3. 控制器为视图(JSP)(request.setAttribute("customers", customers);)准备属性,并选择要使用的.jsp文件,然后迭代列表并将XHTML渲染回浏览器。
  4. 结构(我的建议/理解)

    表示层:目前正在使用我认为的MVC Web实现:servlet(控制器),jsp(视图)和我自己的OO XHTML表单实现(即CustomerForm)就在这里。应该可以通过切换此表示层来使用Swing / JavaFX / Flex GUI,而无需在下面的层上更改任何内容。

    逻辑层:分为两层,顶部是Business Objects(BO)。负责业务逻辑,但除了输入验证之外我还没有找到太多内容,因为应用程序主要由简单的CRUD操作组成......在许多情况下,这些方法只是在DAO层上调用一个具有相同名称的方法。 / p>

    使用CRUD方法的DAO类,它再次与下面的数据层联系。还有一个convertToVO(ResultSet res)方法,它们从数据库和(值列表)值对象执行ORM。所有方法都将值对象作为输入,即customerDAO-> save(voter)并在成功时返回更新的选举者,在失败时返回null。

    数据层:底部数据存储在数据库中或存储为XML文件。我没有在这里“编码”任何东西,除了一些MySQL存储过程和触发器。

    问题(除了标题中的问题):

    1. MVC中的M.当模型是从逻辑层中的业务对象返回的列表/ VO时,我不确定是否可以调用此n层MVC?当控制器/视图在这里时,模型是否需要驻留在表示层中?表示层中的表单模板可以称为模型吗?如果是这样; BO中的形式和列表都被视为MVC中的M?
    2. 根据我的理解,在MVC中,视图应该观察模型并更新更新,但这在视图是呈现的XHTML页面的Web应用程序中是不可能的?这反过来又引出了一个问题:MVC对于Web应用程序与常规桌面应用程序的实现方式不同吗?
    3. 当所有HTTP请求都在web.xml中显式映射时,我没有使用Front Controller模式吗?要使用Front Controller,我需要将所有请求转发到标准servlet /控制器,然后依次评估请求并调用另一个控制器吗?
    4. Business Layer在我的应用程序中感觉有点“无用”。您通常在此图层/对象中放置什么?应该总是有业务层吗?我知道它应该包含“业务逻辑”,但究竟是什么呢?我只是执行输入验证并实例化一个或多个DAO并调用它们的相应方法......
    5. 我意识到有一些MVC框架,比如Struts for Java,但是由于这是我的第一个Java Web应用程序,我试图更深入地了解它是如何工作的。回想起来,我希望你能回答我偶然发现的一些问题。

2 个答案:

答案 0 :(得分:1)

  

当模型是从逻辑层中的业务对象返回的列表/ VO时,我不确定是否可以调用此n层MVC

这些都是非常好的模特。我还认为Struts中的ActionForms是模型。 ActionForms是Struts用来表示/建模HTML表单的。

  

在MVC中,视图应该观察模型并更新更新,但这在Web应用程序中是不可能的

是的,关于你是否可以使用网络应用程序获得真正的MVC,这是一个争论的问题。

  

是否应该总是有业务层?

这取决于应用程序的类型。某些应用程序是数据库驱动的,实际上是数据库的UI。在这种情况下,所需的业务逻辑非常少。

  

数据层:

存储过程实际上不是数据层代码的一部分。您应该创建由业务对象调用的数据访问对象(DAO)。 DAO调用存储过程。此外,DAO接口不应向业务对象提供有关数据存储位置的提示,无论是数据库还是文件系统,还是来自某些Web服务。

答案 1 :(得分:0)

我认为你会被术语挂断。 MVC模式(我相信)早于您描述的经典Web应用程序拱。它被用来称为web app arch MVC 2(Model 2等),以区别于原始的MVC模式......

请参阅此链接> http://www.javaranch.com/drive/servlet/#mvc2

HTH