【问题标题】:Should ORM / RDBMS be used with Java desktop applications? [closed]ORM / RDBMS 应该与 Java 桌面应用程序一起使用吗? [关闭]
【发布时间】:2011-06-22 21:28:46
【问题描述】:

我一直在为这个问题绞尽脑汁。我已经在 Django 世界中生活了一段时间,很难再回到 Java。

我正在制作一个桌面 Swing 应用程序,它执行一些简单的 CRUD 操作,在模型上有一些简单的一对多关系。我一直在研究像 DataNucleus 这样的 ORM 解决方案,但我被它 20mb 的依赖关系、对 XML 的依赖以及我对所有三字母缩写词的不熟悉而推迟了。

我要做的只是让用户填写一些字段,将它们显示在表格中,让他们选择/编辑/删除表格中的条目,然后将这些数据保存/打开到文件中。

对于这种情况,ORM 解决方案是否过度?我是否应该将它们全部放在一个 ArrayList 中并自己编写所有 CRUD 内容?

【问题讨论】:

  • 为了补充这一点,我遇到了JFace,这是一个帮助 SWT 的库,它支持 MVC 样式的表绑定,同时独立于您使用的持久性类型。跨度>

标签: orm desktop datanucleus java


【解决方案1】:

所有这些框架都是为了消除样板并用已经过死测试的稳定代码替换它的明确目的而创建的。无论您是在谈论 RDBMS 的 ORM 还是 XML 的映射/绑定框架,它们“几乎”都不会矫枉过正。它们有助于降低您的应用程序的风险状况。关键首字母缩写词是 DRY。

【讨论】:

    【解决方案2】:

    DataNucleus 20Mb 大小的依赖项?我建议您重新审视这一点并专注于您的要求。如果您计算所有可能的数据存储支持以及所有可能的数据存储支持的所有可能依赖项,您可能会达到 20Mb(但是您是否要持久化到 9 种不同类型的数据存储?),但是如果您想要坚持说使用 JDO 的 Excel 你的内存小于 3Mb。而且这些 jar 的大小对您的应用程序的速度几乎没有影响,或者根本没有影响(除了下载时间,而且互联网连接比以前快了一点)。

    对 XML 的依赖?没有。您可以根据需要使用注释(并且没有 XML)。

    【讨论】:

    • 感谢您解决这个问题。我有一个小问题:正如我所说,该应用程序具有标准的文件->打开和文件->保存功能。如果我要持久保存到 Excel 文件,它是否会针对我对模型对象所做的每次更改都保存到文件中,或者是否可以这样做以使模型对象保留在内存中并且仅在用户单击“保存”时才保留?
    • 最合乎逻辑的方式是 File->Open 调用持久性 API 上的检索方法,File->Save 调用持久性 API 上的 save 方法。 Persist/Retrieve 调用需要几毫秒,因此您的用户不会注意到它们。归根结底,您的代码决定了您何时将数据实际放入数据存储区
    【解决方案3】:

    当您说“将数据保存/打开到文件”时,它是什么类型的文件?如果是 XML,你可以看看 EclipseLink MOXy,它是一个 Object-XML-Mapper(JAXB 实现)。

    【讨论】:

    • 我想,他的意思是 XML 指的是定义 XML 文件中的映射
    【解决方案4】:

    我不会将 RDBMS 用于您描述的小型桌面解决方案。有很多漂亮的工具可以保存数据:自定义开发的文本文件访问、序列化的 java 对象、使用 protobuf 的序列化可移植数据。

    如果您仍想使用类似 SQL 的访问,您可以使用 SQL lite 或 MYSQL 的嵌入式版本。

    我个人做了一个小订单管理应用程序,将数据集合存储在磁盘上的文件中。您也可以根据您的 django 背景考虑您必须熟悉的 JSON 格式。

    【讨论】:

      【解决方案5】:

      如果您使用 ORM(如 JPA/Hibernate 或其他),则某些 IDE(如 Netbeans)能够生成执行与数据库通信的所有类。您需要做的就是创建一个数据库模式(用 oracle 的术语来说)。所以在那之后你只需要编写一个业务逻辑。 如果您不想在项目中使用 javaEE,可以使用FireStormDAO 之类的工具。它可以从数据库的 DDL 脚本生成 DAO 类。

      【讨论】:

        猜你喜欢
        • 2011-01-19
        • 2011-02-15
        • 2016-09-15
        • 1970-01-01
        • 1970-01-01
        • 2018-07-27
        • 1970-01-01
        • 2011-08-04
        • 2010-09-08
        相关资源
        最近更新 更多