gpt4 book ai didi

java - 纯 Java 持久性和 JavaFX 表示层 : approach for class design?

转载 作者:行者123 更新时间:2023-12-04 05:03:17 25 4
gpt4 key购买 nike

另一个新手问题。我有一个名为 Services 的 RDBMS 表,声明如下:

CREATE CACHED TABLE Services ( 
serv_id BIGINT GENERATED ALWAYS AS IDENTITY (START WITH 100) PRIMARY KEY,
enc_id BIGINT REFERENCES Encounters ( enc_id ),
prov_id INTEGER REFERENCES Providers ( prov_id ),
DoS DOUBLE DEFAULT 0.0 NOT NULL,
DoP DOUBLE DEFAULT 0.0 NOT NULL,
DoR DOUBLE DEFAULT 0.0 NOT NULL
);

在处理 Service 对象到这个表的持久性时,我编写了一个 Java 类,将每个 SQL 字段映射到其对应的 Java 类型字段,即类 Service 具有相同的六个字段。因为我正在开发一个在 JavaFX 应用程序中使用此表的应用程序,所以我对每种类型都使用了 JavaFX 属性字段,例如。
Class Service {
LongProperty serv_id = new SimpleLongProperty();
:
}

这是我现在想知道的问题......

我的 RDBMS 表是高度规范化的,所以我几乎从不处理这个级别的实际数据库表。在向用户显示我的服务表中的信息之前,我执行以下查询:
SELECT s.serv_id, r.rx_id, p.prov_id, s.*, sr.*, r.*, 
p.lastName || ', ' || p.firstName AS provName" +
FROM Services AS s
INNER JOIN Service_RXs AS sr USING ( serv_id )
INNER JOIN RXCodes AS r USING ( rx_id )
INNER JOIN Providers AS p USING ( prov_id )
WHERE s.enc_id = ?
ORDER BY s.DoS DESC;

此结果集有 11 列,或仅是 Services 表中列数的两倍。此结果集中的信息将用于 TableView。因为拥有一个代表 TableView 数据模型的类是最佳实践,所以在我看来,我有三个选择:
  • 选择 1

  • 我可以将一个类用于所有目的,即我可以扩展 Service 类来表示我的持久层(即 JDBC)和 JavaFX GUI API 所需的功能。我不喜欢这个解决方案。这意味着我不得不担心只保留对象的一部分,我必须有在正确的时间获取所有非规范化数据的方法,而且我不得不放弃考虑我的类的吸引人的概念作为一个角色。
  • 选择 2

  • 我可以编写完全独立的类,一个用于数据库表,另一个用于 TableView 的数据模型。我不认为这有什么问题,但它似乎也会造成一定数量的重复负担。
  • 选择 3

  • 我可以在 Service 类中编写一个内部类,比如 Service.Extended,它代表相应 Service 对象的非规范化形式。乍一看,这对我来说是一个很好的解决方案。它允许我保持对象之间的目的分离。内部类对象还可以访问封闭类中所需的字段,从而避免重复。我想我可以使用静态工厂方法轻松地为 ObservableList 创建 JavaFX 数据模型对象,该方法将在代码中干净地创建新的 Service.Extended 对象。

    我不可能是第一个遇到同样问题的人。如果我可能会问,在尝试将规范化数据集适应 GUI 表示层时,其他人采用了哪些解决方案?这是 Hibernate/JPA 帮助的那种事情吗?如果我坚持使用 JDBC,内部类方法是个好主意吗?

    最佳答案

    从 UI 返回如何?我的意思是:

  • 设计 UI 以执行您需要它执行的操作..
  • 使用您的 JavaFX 属性创建一个支持类(模型)。
  • 编写 DAO 以在表中存储模型的属性。

  • 通过这样做,您只需编写您真正需要的代码,而无需担心抽象。但是,DAO 会将数据库设计的复杂性反射(reflect)到您试图解决的问题 1:1 中。

    最好和最简单的解决方案是最直接的,代码最少,类最少,第三方依赖最少。

    还要记住让在后台线程中运行数据库操作成为架构的关键部分。不应从其他线程访问 JavaFX 属性。试图改造这对我来说是一个真正的痛苦。

    关于java - 纯 Java 持久性和 JavaFX 表示层 : approach for class design?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15854664/

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