gpt4 book ai didi

Java 桌面应用程序设计 - MVC 与 Hibernate

转载 作者:行者123 更新时间:2023-12-01 05:27:54 26 4
gpt4 key购买 nike

我有一些关于我的 Java 应用程序的设计问题。该软件是一个桌面应用程序,使用 MySQL 数据库来存储不同类型的对象(客户、员工、文档)。每个员工都有一个客户集合,每个客户都包含许多文档。整个结构是通过 hibernate 延迟加载的。

我目前使用这四层来构建我的应用程序

  • 模型 - 包含数据的对象,例如客户、员工……
  • View - 每个操作的 View (添加客户、创建文档......)
  • Controller - 每个 View 都有自己的 Controller ,用于控制一个或多个业务对象
  • 业务对象 - 封装模型上操作的逻辑(添加客户 = customerBO,添加文档 = documentBO,...)

因此,当用户现在想要向客户添加新文档时,客户 View 的 Controller 会打开一个新的(我们称之为)“文档窗口”,它有自己的 Controller 。由于每个文档都必须属于一个客户,因此我将客户作为参数传递。但如果我使用这种方式,我必须确保当前的 hibernate session 已打开,并且客户对象已重新附加到 session 以使用延迟加载。

所以我现在的问题是:有没有更优雅的方法来做到这一点?也许通过存储当前活跃客户的 session 类?或者我的结构中是否存在我没​​有看到的错误?

最佳答案

这对于数据传输对象或值对象来说可能是一个很好的用途。简而言之,在 UI 代码中使用只读、非 Hibernate、分离的 Customer 表示形式,而不是 Hibernate 创建的表示形式。此 Customer 对象将是 UI 所需的后端完整 Customer 对象的最小投影。实际上,您可能只需要名称和 ID(当然取决于您的 UI)。

过去,我引入了一个“服务”接口(interface),该接口(interface)仅在这些值对象或 DTO 方面起作用(这些术语真正不能互换,但我试图保持灵 active ,重要的是概念:-))。

保存代表客户完成的操作时,调用服务组件 service#attachDocument(customer.getCustomerId()) 或其他组件。该组件将与 Hibernate 交互以检索客户并调用 customer.addDocument(documentId) (或任何适合您的模型的内容)。

关于Java 桌面应用程序设计 - MVC 与 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9498073/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com