Hibernate-reactive: Pertimbangkan kembali Nama "Rx"

Dibuat pada 31 Mar 2020  ·  40Komentar  ·  Sumber: hibernate/hibernate-reactive

Rx menyiratkan Ekstensi Reaktif (yaitu RxJava) sebagai ketergantungan. Saya akan merekomendasikan mengubah nama proyek ini menjadi "hibernasi-reaktif" atau serupa untuk menghilangkan kebingungan di muka.

Komentar yang paling membantu

Sejujurnya, saya semakin menyukai opsi berikut:

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

atau:

//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);

Dan kemudian, setelah saya tahu pasti saya menggunakan Mutiny , saya bisa menulis:

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

...

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

Saya pikir kelas luar secara substansial mengurangi masalah kecelakaan impor otomatis. (Meskipun itu memang memiliki kelemahan lain.)

Semua 40 komentar

@emmanuelbernard WDYT?

Ya, itu selalu nama kode.

Kalau begitu sebaiknya kita mengubahnya dengan cepat, karena itu sedang dalam proses untuk memantapkan menjadi nama asli!

Saya telah menugaskan itu kepada saya. Saya akan melakukannya pada akhir minggu, kecuali ada yang keberatan.

Saya akan melakukannya di akhir minggu

Tapi apa yang akan Anda ubah?

hibernate-reactive kedengarannya tidak terlalu buruk

>

+1 untuk hibernasi-reaktif

Pada hari Rabu, 1 April 2020 pukul 07.45 DavideD [email protected] menulis:

hibernate-reactive kedengarannya tidak terlalu buruk

>


Anda menerima ini karena Anda berlangganan utas ini.
Balas email ini secara langsung, lihat di GitHub
https://github.com/hibernate/hibernate-rx/issues/77#issuecomment-607292426 ,
atau berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/AADJJTIRGWQNUSN7FC3WCSLRKNHRJANCNFSM4LX6AEVQ
.

Tidak apa-apa tapi saya tidak ingin mengetik ReactiveSession seribu kali....

Saya suka HibernateRX : menjadi "reaktif" adalah sebuah konsep, itu bukan merek dagang dari RxJava.

Tidak apa-apa tapi saya tidak ingin mengetik ReactiveSession seribu kali.

Jenis? Keyboard Anda tidak memiliki tombol spasi? :)

Agar adil, saya tidak terlalu suka menggunakan awalan dalam nama kelas. Apakah itu cukup untuk memiliki dalam paket? Atau terlalu membingungkan saat bekerja dengan ORM?
Mungkin kita bisa menggunakan R sebagai awalan?

Berikut ringkasan opsi yang dapat saya pikirkan (jangan ragu untuk menyarankan sesuatu yang berbeda):

  1. org.hibernate.rx.RxSession (saat ini)
  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

Ada saran lain?

Saya tidak memiliki preferensi yang kuat. Saya pikir Reactive membuat namanya lebih mudah dibaca dan tidak terlalu panjang. Perhatikan bahwa Ini tidak memerlukan awalan karena untuk beberapa implementasi atau kelas yang memperluas kelas super, itu bisa berupa:

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

Ini tidak terlalu konsisten dalam proyek sekarang. Terkadang kelas menggunakan
RxAbstractEntityPersister

Saya pikir saya akan menggunakan opsi 3: org.hibernate.reactive.ReactiveSession
Tetapi saya akan menunggu untuk mendengar apakah ada saran yang lebih baik atau pendapat yang kuat menentangnya.

Saya akan memilih 3 juga, tapi mungkin @vietj punya pendapat juga?

Ya, saya mencoba untuk menemukan pilihan yang lebih baik, tapi terus terang saya kosong dan saya setuju dengan kalian: sepertinya tidak ada yang lebih baik dari ReactiveSession .

Saya benci kurangnya alias tipe di Jawa. Satu-satunya peretasan yang dapat saya pikirkan adalah memiliki Reactive.Session , Reactive.Query , dll, sebagai antarmuka bagian dalam dari beberapa tipe Reactive , memungkinkan Anda menggunakan impor statis jika Anda mau. Itu pendekatan yang masuk akal, tetapi yang belum pernah saya lihat digunakan orang lain di Jawa.

Saya suka opsi 2 dan 4:

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

Biarkan nama paket menyampaikan bahwa kelasnya "reaktif". Jika kita harus menambahkan Rx/Reactive sebagai awalan ke semua kelas maka itu membuat kelas tampak seperti warga kelas dua.

Kelemahan utama yang saya lihat menggunakan nama kelas yang sama dengan rekan non-reaktif adalah jika kita mengharapkan pengguna untuk menggunakan kedua kelas di kelas yang sama (sehingga membutuhkan nama kelas yang sepenuhnya memenuhi syarat di mana pun jenis diekspresikan), tetapi AFAIK yang seharusnya tidak terjadi?

Saya suka opsi 2 dan 4:

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

FTR Saya juga setuju dengan itu, namun, saya akan mencatat bahwa itu meningkatkan risiko kesalahan saat mengimpor otomatis.

Mengingat bahwa kami pada akhirnya hampir pasti memiliki beberapa jenis sesi reaktif, saya ingin mengusulkan yang berikut:

  • MutinySession untuk Pemberontakan
  • StagedSession atau sesuatu seperti itu untuk CompletionStage
  • dll

WDYT?

Apakah ini satu-satunya API yang menghadap pengguna yang mengekspos rasa tipe reaktif?

Apakah ini satu-satunya API yang menghadap pengguna yang mengekspos rasa tipe reaktif?

Di antara API "utama" pertimbangkan juga yang setara dengan Query .

Sebagai catatan, saya percaya "Rx" memiliki nada yang bagus untuk itu, dan itu sama sekali bukan _owned_ oleh proyek RxJava - seperti yang saya sebutkan di atas - jadi saya ingin menyimpan nama itu karena yang lain tidak terdengar benar.

Pada struktur kontrak

Saya tidak suka kelebihan antarmuka Session , seperti yang ditunjukkan Gavin, ini menyebabkan kesalahan penyelesaian otomatis dan kelebihan kognitif bagi orang-orang.

Jadi +1 untuk salah satu dari pola berikut:

  • MutinySession , RxJava2Session , JDKReactiveSession (untuk CompletionStage dan Flow)
  • SessionMutiny , SessionRxJava2 dll

Pola alternatif adalah reactiveSession.forMutiny().[...] , reactiveSession.forJDK().[...] tetapi itu akan membuat mimpi buruk ketergantungan yang paling mungkin terjadi. reactiveSession.unwrap(MutinySession.class) tampaknya tidak membawa nilai.

Beberapa poin tambahan:

  • Rx memiliki 3 versi yang tidak kompatibel sehingga seseorang harus memiliki nomor versi dalam kontrak
  • Saudara laki-laki CompletionStage adalah Flow itu sebabnya saya menyebutnya JDKReactiveSession
  • RxJava memiliki beberapa tipe ganda dan beberapa tipe tunggal, jadi setiap metode RxJavaXSession kemungkinan besar akan "kelebihan beban" misalnya fetchAsSingle() dll

Saya membayangkan Query juga akan memiliki rekanan Reaktif. BTW terpikir oleh saya bahwa parameter kueri harus menerima tipe langsung dan pembungkus reaktif misalnya Uni<String>

Pada namanya, saya kira Hibernate ORM Reactive baik-baik saja hibernate-orm-reactive tetapi @FroMage bagaimana dengan "Panache Rx" apakah ia melakukan transformasi serupa?

@emmanuelbernard perhatikan bahwa cara saat ini untuk mendapatkan Session dan SessionFactory adalah:

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

Saya cukup senang dengan pola ini.

JDKReactiveSession

Ugh. Itu terlihat mengerikan untuk sesuatu yang mungkin sering kita lihat dalam kode.

Saya membayangkan Query juga akan memiliki rekanan Reaktif.

Ya, itu sudah ada dan saat ini disebut RxQuery . Tapi itu tidak melakukan apa-apa untuk saat ini.

Sejujurnya, saya semakin menyukai opsi berikut:

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

atau:

//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);

Dan kemudian, setelah saya tahu pasti saya menggunakan Mutiny , saya bisa menulis:

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

...

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

Saya pikir kelas luar secara substansial mengurangi masalah kecelakaan impor otomatis. (Meskipun itu memang memiliki kelemahan lain.)

itu terlihat brilian @gavinking

@gavinking Saya sangat suka proposal terakhir Anda.

Saya pikir kelas luar secara substansial meringankan masalah kecelakaan impor otomatis. (Meskipun itu memang memiliki kelemahan lain.)

Sebagai contoh?

@DavideD salah satu kelemahannya adalah IDE biasanya tidak secara otomatis menambahkan impor statis. (Meskipun Anda dapat mengonfigurasinya untuk melakukannya.)

@emmanuelbernard perhatikan bahwa cara saat ini untuk mendapatkan Session dan SessionFactory adalah:

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

Saya cukup senang dengan pola ini.

JDKReactiveSession

Ugh. Itu terlihat mengerikan untuk sesuatu yang mungkin sering kita lihat dalam kode.

Dari sebagian besar umpan balik yang saya kumpulkan, orang membenci CompletionStage dan memilih RxJava atau teman. Jadi versi itu akan menjadi pilihan orang miskin itu.

Dari sebagian besar umpan balik yang saya kumpulkan, orang membenci CompletionStage dan memilih RxJava atau teman. Jadi versi itu akan menjadi pilihan orang miskin itu.

Apakah Anda mencoba untuk memastikan itu tidak memiliki kesempatan untuk digunakan? :-D

Dari sebagian besar umpan balik yang saya kumpulkan, orang membenci CompletionStage dan memilih RxJava atau teman. Jadi versi itu akan menjadi pilihan orang miskin itu.

Tentu, aku juga membencinya.

IDE biasanya tidak secara otomatis menambahkan impor statis

Itu poin yang cukup kuat untuk menentangnya, bahwa Anda tidak dapat menulis Session dan mendapatkan proposal IDE untuk mengimpor static Mutiny.Session , jadi Anda selalu harus mengetiknya dengan awalan Mutiny.Session . Dan semua dokumen harus menyertakan impor juga, yang membuatnya sulit untuk disalin/ditempel.

Pada namanya, saya kira Hibernate ORM Reactive baik-baik saja hibernate-orm-reactive tapi @FroMage bagaimana dengan "Panache Rx" apakah itu melewati transformasi yang sama?

Ya. Itu selalu menjadi nama kode.

Itu poin yang cukup kuat untuk menentangnya, bahwa Anda tidak dapat menulis Sesi dan mendapatkan proposal IDE untuk diimpor

Saya tidak merasa itu kuat: mereka masih dapat menulis Mutiny.SessionFactory , seperti yang mungkin harus kita patuhi dalam dokumentasi (jadi kita tidak perlu memasukkan impor, meskipun mungkin kita selalu harus sebagai aturan umum) .

@FroMage tidak terlalu buruk. Di intelliJ pergi ke Settings > Code Style > Java > Imports . Di Eclipse ada yang serupa.

Untuk apa nilainya, Pemberontakan harus dianggap sebagai API default menurut saya. Sisanya bisa termasuk dalam beberapa paket compat . Bahkan versi CompletionStage/Flow :-)

Pembaruan: Mengingat dokumen Pemberontakan, apakah masuk akal untuk memanggang dalam compat? Cukup mengandalkan Mutiny untuk itu, dan berikan (agak kecil) beban pada pengembang untuk melakukan konversi jika mereka perlu mengonversi dari satu ke yang lain.

Clement menambahkan trampolin ke Mutiny, mungkin menjadi argumen pendukung lain untuk menjadikan Mutiny default untuk Reactive Hibernate.

Diskusi ini berkembang di milis hibernate-dev. Kita semua tampaknya cenderung untuk pergi dengan Hibernate Reactive ... ok?

Akan lebih baik untuk membalas di milis.

Pengingat, untuk mendaftar lihat:

Secara khusus ini adalah utas besar yang berkaitan dengan masalah ini (antara lain):

Hibernasi Reaktif, oke?

:sampanye:

Secara khusus ini adalah utas besar yang berkaitan dengan masalah ini (antara lain):

Utas besar apa, ada satu email;)

Secara pribadi saya masih lebih menyukai HibernateRX -- saya setuju dengan Sanne bahwa RxJava tidak memiliki "Rx" dan IMO HibernateRX adalah nama yang menarik. Hibernate Reactive tampaknya lebih seperti deskripsi daripada nama. Hanya $0,02 saya dan saya tidak ingin mengacaukan utas milis dengan ini.

Secara pribadi saya masih lebih menyukai HibernateRX -- saya setuju dengan Sanne bahwa RxJava tidak memiliki "Rx" dan IMO HibernateRX adalah nama yang menarik. Hibernate Reactive tampaknya lebih seperti deskripsi daripada nama. Hanya $0,02 saya dan saya tidak ingin mengacaukan utas milis dengan ini.

Masalahnya @aguibert adalah apa arti x dalam nama Hibernate Rx Anda?
Ekstensi Reaktif adalah sesuatu yang spesifik https://en.m.wikipedia.org/wiki/Reactive_extensions

benar, saya akan berpikir Hibernate Rx hanya akan berdiri untuk "Ekstensi Reaktif Hibernate". Ekstensi Reaktif adalah sesuatu yang spesifik, tetapi mengacu pada konsep, bukan produk atau proyek tertentu. IMO yang kami lakukan di sini masih sesuai dengan konsep itu.

Karena sepertinya kita sedekat mungkin dengan konsensus seperti yang akan kita dapatkan dengan nama "Hibernate Reactive", saya juga setuju dengan nama itu.

Saya akan menutup ini karena tidak ada pemberontakan sebagai konsekuensi dari email Emmanuel di milis :)

Hibernate Reactive itu! Sekali lagi terima kasih @murphye dan semuanya

Diikuti oleh #111

Apakah halaman ini membantu?
0 / 5 - 0 peringkat