由于对设计模式和架构非常陌生,我很难向其他人解释我的最新应用程序是如何设计的。我已经在认为它是纯 n 层、纯 MVC 和表示层中带有 MVC 的 n 层之间切换。目前我认为后者是正确的,但我想要更有经验的开发人员的想法。
这个怎么运作:
- 浏览器向 Tomcat 发送 HTTP 请求。通过 web.xml 将请求映射到一个 servlet(我称之为控制器)
- 控制器实例化一个或多个业务对象并在这些对象上调用方法,即
customerBO.getById(12)
在调用一个或多个 DAO 方法之前再次执行业务逻辑/验证,即customerDAO.getById(12)
。BO 将 CustomerVO 列表返回给控制器 - 控制器为视图(JSP)准备属性
request.setAttribute("customers", customers);
(
结构(我的建议/理解)
表示层:目前使用我认为是 MVC Web 实现的方式:servlet(控制器)、jsp(视图)和我自己的 OO XHTML 表单实现(即 CustomerForm)就在这里。应该可以通过切换此表示层来使用 Swing/JavaFX/Flex GUI,而无需更改下面层上的任何内容。
逻辑层:分为两层,顶部是业务对象(BO)。负责业务逻辑,但除了输入验证之外,我还没有发现太多可在此处添加的内容,因为应用程序主要由简单的 CRUD 操作组成……在许多情况下,这些方法只是调用 DAO 层上具有相同名称的方法。
带有 CRUD 方法的 DAO 类,它再次与下面的数据层联系。还有一个 convertToVO(ResultSet res) 方法,它们从数据库执行 ORM 并到(列表)值对象。所有方法都将值对象作为输入,即 customerDAO->save(voter) 并在成功时返回更新的投票者,在失败时返回 null。
数据层:底层数据存储在数据库中或作为 XML 文件。除了一些 MySQL 存储过程和触发器,我在这里没有“编码”任何东西。
问题(除了标题中的问题):
- MVC 中的 M。我不确定当模型是从逻辑层中的业务对象返回的列表/VO 时是否可以调用此 n 层 MVC?当控制器/视图在这里时,模型是否需要驻留在表示层中?表示层中的表单模板可以称为模型吗?如果是这样的话; BO 中的表单和列表是否都被视为 MVC 中的 M?
- 据我了解,在 MVC 中,视图应该观察模型并根据变化进行更新,但这在视图是呈现 XHTML 页面的 Web 应用程序中是不可能的?这反过来又让我想到了一个问题:Web 应用程序与常规桌面应用程序的 MVC 实现方式是否不同?
- 当所有 HTTP 请求都显式映射到 web.xml 时,我没有使用前端控制器模式,对吗?要使用前端控制器,我需要将所有请求转发到标准 servlet/控制器,然后再评估请求并调用另一个控制器?
- 业务层在我的应用程序中感觉有点“无用”。您通常在此层/对象中放置什么?是否应该始终有一个业务层?我知道它应该包含“业务逻辑”,但这究竟是什么?我只是执行输入验证并实例化一个或多个 DAO 并在它们上调用适当的方法......
我意识到有 MVC 框架,例如 Struts for Java,但是自从这是我的第一个 Java Web 应用程序以来,我试图更深入地了解事物的工作原理。回想起来,我希望你能回答我偶然发现的一些问题。