Thời gian Noda vs Thời gian Joda?


20

Trong Hướng dẫn sử dụng thời gian của Noda , phần lý do nêu:

API công khai đã được viết lại phần lớn, cả hai để cung cấp một API có tính thành ngữ hơn cho .NET và cũng để điều chỉnh một số quyết định của Joda Time mà nhóm Noda Time xem là "không may". (Một số trong số này đơn giản là do có các mục tiêu khác nhau; một số khác tôi cho rằng thực sự là sai lầm.)

Những quyết định này là khác nhau / tốt hơn là gì? Điều này sẽ không tính sự khác biệt chỉ dành cho cú pháp ngôn ngữ, nhưng sẽ bao gồm mọi thứ được thực hiện để khiến người dùng ít mắc lỗi lập trình (khả năng sử dụng thư viện).

Câu trả lời:


31

Nơi tốt nhất để bắt đầu có lẽ là phần "triết lý thiết kế" trong hướng dẫn sử dụng. Nhưng để đặt ra sự khác biệt cụ thể giữa Thời gian Noda và Thời gian Joda:

  • Noda Time giữ nhiều hơn mã nội bộ của nó. Điều này làm cho nó kém linh hoạt hơn, ở chỗ bạn thực sự không thể tạo hệ thống lịch của riêng mình - nhưng cũng có nghĩa là API đơn giản hơn cả để tìm hiểu và sử dụng.

  • Nullity gần như luôn luôn là một lỗi trong Noda Time. Không còn "nếu bạn chuyển thành null cho múi giờ, chúng tôi sẽ chỉ sử dụng mặc định hệ thống." Bạn cần phải rõ ràng.

  • Nói về mặc định ... chúng tôi không sử dụng đồng hồ hệ thống làm mặc định. Chúng tôi đã có một IClockgiao diện riêng với SystemClockviệc triển khai, nhưng không có gì mặc định là "thời điểm hiện tại".

  • Ngoài các lớp xây dựng cụ thể, mọi thứ đều bất biến. Tôi nghĩ MutableDateTime(et al) trong Joda Time là một sai lầm.

  • Chúng tôi đã tách hệ thống lịch và múi giờ với nhau, vì chúng thực sự rất khác nhau. Vì vậy, một LocalDatebiết về hệ thống lịch mà nó sử dụng, nhưng không phải là múi giờ, ví dụ.

  • Cách giải quyết các giá trị ngày / thời gian cục bộ thành các giá trị ngày / thời gian được khoanh vùng gần với JSR-310 hơn Joda Time. Chúng tôi không chỉ xử lý sự mơ hồ / bỏ qua thời gian theo một cách cụ thể: chúng tôi làm cho người dùng nói những gì họ muốn.

  • Joda Time có nhiều nơi cố gắng đoán những gì bạn muốn từ một API được gõ yếu (ví dụ: mới Instant(Object)). Noda Time tránh điều này đến mức có thể - nó rõ ràng hơn nhiều.

  • Noda Time chặt chẽ hơn về loại số học bạn có thể thực hiện trên loại nào. Vì vậy, ví dụ, bạn không thể thêm a Periodvào ZonedDateTime, bởi vì có những điều kỳ lạ xung quanh việc chuyển đổi tiết kiệm ánh sáng ban ngày có thể làm mọi thứ rối tung lên. Thay vào đó, chúng tôi khuyến khích người dùng chuyển đổi sang LocalDateTime, thực hiện nhiều số học mà họ muốn trong bối cảnh không được khoanh vùng, sau đó chuyển đổi lại.

  • Noda Time sử dụng tính kế thừa khá ít - hệ thống phân cấp trong Joda Time cực kỳ sâu sắc và phức tạp. Thực tế là rất nhiều Thời gian Noda dựa trên các loại giá trị thực sự thực thi điều này, nhưng có một số nơi chúng tôi vẫn đang sử dụng kế thừa lớp, nhưng tôi đã quản lý để thu hẹp đáng kể hệ thống phân cấp thừa kế ... thường phải trả giá về tính linh hoạt mà tôi không cho là đáng giá :)


Liên kết bị hỏng ...
Pacerier
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.