Hibernate-reactive: 重新考虑“Rx”名称

创建于 2020-03-31  ·  40评论  ·  资料来源: hibernate/hibernate-reactive

Rx 将 Reactive Extensions(即 RxJava)作为依赖项。 我建议将此项目的名称更改为“hibernate-reactive”或类似名称,以消除任何前期混淆。

最有用的评论

老实说,我越来越喜欢以下选项:

//I want to try out Mutiny
Mutiny.SessionFactory sessionFactory = emf.unwrap(Mutiny.SessionFactory.class);
Mutiny.Session session = sessionFactory.openReactiveSession();
Mutiny.Query = session.createQuery(hql);

或者:

//I want to try it out with CompletionStage
Stage.SessionFactory sessionFactory = emf.unwrap(Stage.SessionFactory.class);
Stage.Session session = sessionFactory.openReactiveSession();
Stage.Query = session.createQuery(hql);

然后,一旦我确定我正在使用Mutiny ,我就可以写:

import static org.hibernate.reactive.mutiny.Mutiny.*;

...

SessionFactory sessionFactory = emf.unwrap(SessionFactory.class);
Session session = sessionFactory.openReactiveSession();
Query = session.createQuery(hql);

认为外部类大大缓解了自动导入意外的问题。 (虽然它确实有其他缺点。)

所有40条评论

@emmanuelbernard WDYT?

是的,它总是一个代号。

那么我们最好快点改一下,因为它在固化成真名的道路上很顺利!

我已经分配给我了。 除非有人反对,否则我将在本周末完成。

我打算在周末做

但是你打算把它改成什么?

hibernate-reactive听起来还不错

>

+1 到休眠反应

2020 年 4 月 1 日星期三上午 7:45 DavideD [email protected]写道:

hibernate-reactive听起来还不错

>


您收到此消息是因为您订阅了此线程。
直接回复本邮件,在GitHub上查看
https://github.com/hibernate/hibernate-rx/issues/77#issuecomment-607292426
或取消订阅
https://github.com/notifications/unsubscribe-auth/AADJJTIRGWQNUSN7FC3WCSLRKNHRJANCNFSM4LX6AEVQ
.

没关系,但我不想键入ReactiveSession一千次....

我喜欢HibernateRX :“反应性”是一个概念,它不是 RxJava 的商标。

没关系,但我不想键入 ReactiveSession 一千次。

类型? 你的键盘没有空格键? :)

公平地说,我不太喜欢在类名中使用前缀。 放在包里就够了吗? 还是在使用 ORM 时太混乱了?
也许我们可以使用R作为前缀?

这是我能想到的选项的摘要(随意提出不同的建议):

  1. org.hibernate.rx.RxSession (当前)
  2. org.hibernate.rx.Session
  3. org.hibernate.reactive.ReactiveSession
  4. org.hibernate.reactive.Session
  5. org.hibernate.reactive.RSession
  6. org.hibernate.rx.RSession

还有其他建议吗?

我没有强烈的偏好。 我认为 Reactive 使名称更具可读性,而且不会那么长。 请注意,前缀不是必需的,因为对于扩展超类的某些实现或类,它可能类似于:

  1. class AbstracRxtEntityPersister extends RxEntityPersister
  2. class AbstracReactivetEntityPersister extends ReactiveEntityPersister

这在目前的项目中不是很一致。 有时类正在使用
RxAbstractEntityPersister

我想我会使用选项 3: org.hibernate.reactive.ReactiveSession
但我会等待听到是否有更好的建议或强烈的反对意见。

我也会投票给3 ,但也许@vietj也有意见?

是的,我试图想出一个更好的选择,但坦率地说,我画了一个空白,我同意你们的看法:似乎没有什么比ReactiveSession更好的

讨厌Java 中缺少类型别名。 我能想到的唯一 hack 是将Reactive.SessionReactive.Query等作为某些Reactive类型的内部接口,让您可以根据需要使用静态导入。 这是一种合理的方法,但我从未真正见过其他人在 Java 中使用过这种方法。

我喜欢选项 2 和 4:

  • org.hibernate.rx.Session
  • org.hibernate.reactive.Session

让包名传达这些类是“反应性的”。 如果我们必须将 Rx/Reactive 作为前缀添加到所有类,那么它会使类看起来像二等公民。

我认为使用与非反应性对应类相同的类名的主要缺点是,如果我们希望用户在同一个类中使用这两个类(因此需要在任何表示类型的地方使用完全限定的类名),但 AFAIK 不应该发生?

我喜欢选项 2 和 4:

  • org.hibernate.rx.Session
  • org.hibernate.reactive.Session

FTR 我也同意,但是,我会注意到它会增加自动导入时出错的风险。

鉴于我们最终几乎可以肯定会有多种类型的反应式会话,我想提出以下建议:

  • MutinySession用于叛变
  • StagedSession或类似的东西CompletionStage
  • 等等

WDYT?

这是唯一一个暴露响应式风格的面向用户的 API 吗?

这是唯一一个暴露响应式风格的面向用户的 API 吗?

在“主要”API 中,还要考虑Query等价物。

郑重声明,我相信“Rx”听起来不错,而且它根本不属于 RxJava 项目 - 正如我上面提到的 - 所以我想保留这个名字,因为其他名字听起来不正确。

关于合同结构

我不喜欢Session界面的过载,正如 Gavin 指出的那样,它会导致自动完成错误和人们的认知过载。

因此对于以下任一模式 +1:

  • MutinySessionRxJava2SessionJDKReactiveSession (用于 CompletionStage 和 Flow)
  • SessionMutiny , SessionRxJava2

另一种模式是reactiveSession.forMutiny().[...]reactiveSession.forJDK().[...]但它很可能会成为依赖噩梦的地狱。 reactiveSession.unwrap(MutinySession.class)似乎没有带来价值。

一些额外的点:

  • Rx 有 3 个不兼容的版本,因此需要在合约中包含版本号
  • CompletionStage的臂膀是 Flow 这就是为什么我叫它JDKReactiveSession
  • RxJava 有多种类型和多种单一类型,因此每个RxJavaXSession方法可能会被“重载”,例如fetchAsSingle()

我想Query也会有一个 Reactive 对应物。 顺便说一句,我发现查询参数应该接受直接类型和反应式包装器,例如Uni<String>

在名称上,我猜 Hibernate ORM Reactive 很好hibernate-orm-reactive但是@FroMage “Panache Rx”怎么样,它是否经过了类似的转换?

@emmanuelbernard请注意,当前获取SessionSessionFactory是:

RxSessionFactory sessionFactory = emf.unwrap(RxSessionFactory.class);
RxSession session = sessionFactory.openRxSession();

我对这种模式相当满意。

JDKReactiveSession

啊。 对于我们可能经常在代码中看到的东西来说,这看起来很可怕。

我想Query也会有一个 Reactive 对应物。

是的,它已经存在,目前称为RxQuery 。 但它暂时没有任何作用。

老实说,我越来越喜欢以下选项:

//I want to try out Mutiny
Mutiny.SessionFactory sessionFactory = emf.unwrap(Mutiny.SessionFactory.class);
Mutiny.Session session = sessionFactory.openReactiveSession();
Mutiny.Query = session.createQuery(hql);

或者:

//I want to try it out with CompletionStage
Stage.SessionFactory sessionFactory = emf.unwrap(Stage.SessionFactory.class);
Stage.Session session = sessionFactory.openReactiveSession();
Stage.Query = session.createQuery(hql);

然后,一旦我确定我正在使用Mutiny ,我就可以写:

import static org.hibernate.reactive.mutiny.Mutiny.*;

...

SessionFactory sessionFactory = emf.unwrap(SessionFactory.class);
Session session = sessionFactory.openReactiveSession();
Query = session.createQuery(hql);

认为外部类大大缓解了自动导入意外的问题。 (虽然它确实有其他缺点。)

看起来很棒@gavinking

@gavinking我真的很喜欢你的最后一个提议。

我认为外部类大大缓解了自动导入意外的问题。 (虽然它确实有其他缺点。)

例如?

@DavideD 的一个缺点是 IDE 通常不会自动添加静态导入。 (虽然你可以配置它们来做到这一点。)

@emmanuelbernard请注意,当前获取SessionSessionFactory是:

RxSessionFactory sessionFactory = emf.unwrap(RxSessionFactory.class);
RxSession session = sessionFactory.openRxSession();

我对这种模式相当满意。

JDKReactiveSession

啊。 对于我们可能经常在代码中看到的东西来说,这看起来很可怕。

从我收集到的大部分反馈来看,人们讨厌CompletionStage并选择 RxJava 或朋友。 所以那个版本将是穷人的选择。

从我收集到的大部分反馈来看,人们讨厌 CompletionStage 并选择 RxJava 或朋友。 所以那个版本将是穷人的选择。

您是否试图确保它没有被使用的机会? :-D

从我收集到的大部分反馈来看,人们讨厌CompletionStage并选择 RxJava 或朋友。 所以那个版本将是穷人的选择。

当然,我也讨厌。

IDE 通常不会自动添加静态导入

这是反对它的一个非常强的点,你不能写Session并获得一个 IDE 建议来导入static Mutiny.Session ,所以你总是必须输入前缀Mutiny.Session 。 而且所有文档也必须包含导入,这使得复制/粘贴变得困难。

从名字上看,我猜 Hibernate ORM Reactive 是不错的 hibernate-orm-reactive 但

是的。 它一直是一个代号。

这是反对它的一个非常强的点,您不能编写 Session 并获得要导入的 IDE 建议

我觉得它没有那么强:他们仍然可以写Mutiny.SessionFactory ,就像我们可能应该坚持在文档中一样(所以我们不必包含导入,即使我们总是应该作为一般规则) .

@FroMage还不错。 在 IntelliJ 中,转到Settings > Code Style > Java > Imports 。 在 Eclipse 中有类似的东西。

就其价值而言,Mutiny 在我看来应该被视为默认 API。 其余的可能属于某些compat包。 甚至CompletionStage/Flow版本:-)

更新:鉴于 Mutiny 文档,在兼容中烘焙是否有意义? 只需依靠 Mutiny 即可,如果开发人员需要从一种转换到另一种,则将(相当小的)负担交给开发人员来进行转换。

Clement 正在向 Mutiny 中添加蹦床,这可能是使 Mutiny 默认为 Reactive Hibernate 的另一个支持论据。

这个讨论在 hibernate-dev 邮件列表上发展。 我们似乎都倾向于使用Hibernate Reactive ......好吗?

最好在邮件列表上回复。

提醒,注册见:

具体来说,这是与此问题相关的大线程(除其他外):

休眠反应,好吗?

:香槟酒:

具体来说,这是与此问题相关的大线程(除其他外):

什么大线程,只有一封电子邮件;)

就个人而言,我仍然更喜欢 HibernateRX——我同意 Sanne 的观点,即 RxJava 不拥有“Rx”,而 IMO HibernateRX 是一个吸引人的名字。 Hibernate Reactive 看起来更像是描述而不是名称。 只是我的 0.02 美元,我不想用这个把邮件列表线程弄乱。

就个人而言,我仍然更喜欢 HibernateRX——我同意 Sanne 的观点,即 RxJava 不拥有“Rx”,而 IMO HibernateRX 是一个吸引人的名字。 Hibernate Reactive 看起来更像是描述而不是名称。 只是我的 0.02 美元,我不想用这个把邮件列表线程弄乱。

问题@aguibert是 x 在您的 Hibernate Rx 名称中代表什么?
反应式扩展是特定的https://en.m.wikipedia.org/wiki/Reactive_extensions

是的,我认为 Hibernate Rx 只是代表“Hibernate Reactive Extensions”。 Reactive Extensions 是特定的东西,但它指的是一个概念,而不是特定的产品或项目。 IMO 我们在这里所做的仍然符合这个概念。

由于看起来我们与“Hibernate Reactive”这个名字一样接近共识,但我对这个名字也完全没问题。

我将关闭它,因为邮件列表中的 Emmanuel 的电子邮件没有引起反抗:)

Hibernate Reactive是! 再次感谢@murphye和所有

跟进#111

此页面是否有帮助?
0 / 5 - 0 等级