由于对设计模式和架构非常不熟悉,我很难向其他人解释我的最新应用程序是如何设计的。我已经在认为它是纯 n 层、纯 MVC 和表示层中带有 MVC 的 n 层之间切换。目前我认为后者是正确的,但我想要更有经验的开发人员的想法。
怎么运行的:
customerBO.getById(12)
在调用一个或多个 DAO 方法之前再次执行业务逻辑/验证,即 customerDAO.getById(12)
. BO 将 CustomerVO 列表返回给 Controller request.setAttribute("customers", customers);
) 准备属性并选择要使用的 .jsp 文件,该文件反过来将迭代列表并将 XHTML 呈现回浏览器。 结构(我的建议/理解)
展示层 :目前使用我认为是 MVC Web 实现:servlet( Controller )、jsp( View )和我自己的 OO XHTML 表单实现(即 CustomerForm)就在这里。应该可以通过切换此表示层来使用 Swing/JavaFX/Flex GUI,而无需更改下面层上的任何内容。
逻辑层 :分为两层,上面是业务对象(BO)。负责业务逻辑,但除了输入验证之外,我还没有发现太多可放在这里的内容,因为应用程序主要由简单的 CRUD 操作组成……在许多情况下,这些方法只是调用 DAO 层上具有相同名称的方法。
带有 CRUD 方法的 DAO 类,它再次与下面的数据层联系。还有一个 convertToVO(ResultSet res) 方法,它们从数据库执行 ORM 并到(列表)值对象。所有方法都将值对象作为输入,即 customerDAO->save(voter) 并在成功时返回更新的投票者,在失败时返回 null。
数据层 :底部数据存储在数据库中或作为 XML 文件。除了一些 MySQL 存储过程和触发器,我在这里没有“编码”任何东西。
问题(除了标题中的问题):
我意识到有 MVC 框架,例如 Struts for Java,但自从这是我的第一个 Java Web 应用程序以来,我试图更深入地了解事物的工作原理。回想起来,我希望你能回答我偶然发现的一些问题。
最佳答案
I'm not sure if I can call this n-tier MVC when the models are lists/VO's returned from business objects in the logic tier
这些都是非常好的模型。我还认为 Struts 中的 ActionForms 是模型。 ActionForms 是 Struts 用来表示/建模 HTML 表单的。
in MVC the view is supposed to observe the model and update on change, but this isn't possible in a web-application
是的,关于您是否可以在 Web 应用程序中使用真正的 MVC,这是一个有争议的问题。
Should one always have a business layer?
这取决于应用程序的类型。一些应用程序是数据库驱动的,本质上是数据库的 UI。在这种情况下,几乎不需要业务逻辑。
Data Tier:
存储过程实际上并不是数据层代码的一部分。您应该创建由业务对象调用的数据访问对象 (DAO)。 DAO 调用存储过程。此外,DAO 接口(interface)不应向业务对象提示数据存储在何处,无论是数据库、文件系统还是来自某些 Web 服务。
关于java - 我是否使用 MVC 正确实现了 n 层应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/899803/