Noda Time vs Joda Time?

21

Dalam Panduan Pengguna Noda Time , bagian rasional menyatakan:

API publik sebagian besar telah ditulis ulang, baik untuk menyediakan API yang lebih idiomatis untuk .NET, dan juga untuk memperbaiki beberapa keputusan Joda Time yang oleh tim Noda Time dianggap "tidak menguntungkan". (Beberapa di antaranya hanya karena memiliki tujuan yang berbeda; yang lain saya berpendapat benar-benar kesalahan.)

Apa keputusan yang berbeda / lebih baik? Ini tidak akan menghitung perbedaan hanya untuk sintaksis bahasa, tetapi akan mencakup apa pun yang dilakukan untuk membuat pengguna cenderung membuat kesalahan pemrograman (kegunaan perpustakaan).

Neal Tibrewala
sumber

Jawaban:

32

Tempat terbaik untuk memulai mungkin bagian "filosofi desain" pada panduan pengguna. Tetapi untuk menjabarkan perbedaan spesifik antara Noda Time dan Joda Time:

  • Noda Time menyimpan lebih banyak kode internal. Ini membuatnya kurang fleksibel, karena Anda sebenarnya tidak dapat membuat sistem kalender Anda sendiri - tetapi juga berarti API lebih mudah untuk dipelajari dan digunakan.

  • Nullity hampir selalu merupakan kesalahan dalam Noda Time. Tidak ada lagi "jika Anda memasukkan nol untuk zona waktu, kami hanya akan menggunakan standar sistem." Anda harus eksplisit.

  • Berbicara tentang standar ... kami tidak menggunakan jam sistem sebagai default. Kami memiliki IClockantarmuka terpisah dengan SystemClockimplementasi, tetapi tidak ada yang default ke "waktu saat ini."

  • Selain dari kelas pembangun tertentu, semuanya tidak berubah. Saya pikir MutableDateTime(et al) di Joda Time adalah kesalahan.

  • Kami telah memisahkan sistem kalender dan zona waktu satu sama lain, karena keduanya sangat berbeda. Jadi LocalDatetahu tentang sistem kalender yang digunakannya, tetapi bukan zona waktu, misalnya.

  • Cara menyelesaikan nilai tanggal / waktu setempat ke nilai tanggal / waktu yang dikategorikan lebih dekat ke JSR-310 daripada Joda Time. Kami tidak hanya menangani ambiguitas / melewatkan waktu dengan cara tertentu: kami membuat pengguna mengatakan apa yang mereka inginkan.

  • Joda Time memiliki berbagai tempat untuk mencoba menebak apa yang Anda inginkan dari API yang diketik dengan lemah (mis. Baru Instant(Object)). Noda Time menghindari ini sejauh mungkin - itu jauh lebih eksplisit.

  • Noda Time lebih ketat dalam jenis aritmatika apa yang dapat Anda lakukan pada jenis yang mana. Jadi misalnya, Anda tidak dapat menambahkan a Periodke ZonedDateTime, karena ada keanehan di sekitar transisi daylight saving yang dapat mengacaukan segalanya. Sebagai gantinya, kami mendorong pengguna untuk mengonversi LocalDateTime, melakukan sebanyak mungkin aritmatika yang mereka inginkan dalam konteks yang tidak dikategorikan, dan kemudian mengonversi kembali.

  • Noda Time menggunakan warisan lebih sedikit - hierarki di Joda Time sangat dalam dan rumit. Fakta bahwa banyak Noda Time didasarkan pada tipe nilai sebenarnya menegakkan ini, tetapi ada beberapa tempat di mana kita masih menggunakan warisan kelas, tetapi saya telah berhasil meruntuhkan hierarki warisan secara signifikan ... sering dengan mengorbankan fleksibilitas yang saya anggap tidak berharga :)

Jon Skeet
sumber
Tautannya