Noda Time vs Joda Time?


21

In Noda Zaman Kullanıcı Kılavuzu , gerekçe bölümünde devletler:

genel API, hem .NET için daha deyimsel bir API sağlamak hem de Noda Time ekibinin "talihsiz" olarak gördüğü Joda Time kararlarının bazılarını düzeltmek için büyük ölçüde yeniden yazılmıştır. (Bunlardan bazıları sadece farklı hedeflere sahip olduğundan; tartıştığım diğerleri gerçekten hatalar.)

Farklı / daha iyi olan bu kararlar nelerdir? Bu, yalnızca dil sözdizimi için farklılıkları saymaz, ancak kullanıcıların bir programlama hatası (kitaplık kullanılabilirliği) yapma olasılığını azaltmak için yapılan her şeyi içerir.

Yanıtlar:


32

Başlamak için en iyi yer muhtemelen kullanıcı kılavuzunun "tasarım felsefesi" bölümüdür. Ancak Noda Time ve Joda Time arasındaki belirli farklılıkları ortaya koymak için :

  • Noda Time kodunun çok daha fazlasını dahili tutar. Bu aslında ki, daha az esnek hale getirir olamaz kendi takvim sistemi oluşturmak - ama aynı zamanda API öğrenmek ve kullanmak hem daha basit olduğu anlamına gelir.

  • Nullity, Noda Time'da neredeyse her zaman bir hatadır. Artık "bir saat dilimi için null değerini iletirseniz, yalnızca sistem varsayılanını kullanırız." Açık olmanız gerekir.

  • Varsayılanlardan bahsetmişken ... sistem saatini varsayılan olarak kullanmayız. IClockBir SystemClockuygulamayla ayrı bir arayüzümüz var , ancak hiçbir şey varsayılan olarak "şimdiki zaman" a ayarlanmıyor.

  • Spesifik kurucu sınıfların yanı sıra, her şey değişmezdir. Sanırım MutableDateTimeJoda Time'daki (et al) bir hata idi.

  • Takvim sistemini ve saat dilimini birbirinden ayırdık, çünkü gerçekten çok farklı kaygılar. Örneğin LocalDate, kullandığı takvim sistemini bilir, ancak saat dilimini bilmez.

  • Yerel tarih / saat değerlerinin bölge tarih / saat değerlerine çözümlenme biçimi JSR-310'a Joda Saati'nden daha yakındır. Belirsizlik / atlanan zamanları belirli bir şekilde ele almıyoruz: kullanıcıya istediklerini söylemesini sağlıyoruz.

  • Joda Time, zayıf yazılan bir API'dan (ör. Yeni Instant(Object)) ne istediğinizi tahmin etmeye çalıştığı çeşitli yerlere sahiptir . Noda Time bundan mümkün olduğunca kaçınır - çok daha açıktır.

  • Noda Time, hangi türlerde ne tür aritmetik yapabileceğiniz konusunda daha katıdır. Yani, örneğin, bir ekleyemezsiniz Perioda ZonedDateTimehangi could işleri berbat yaz saati geçişleri etrafında garipliğiyiz çünkü. Bunun yerine, kullanıcıları bölgelere dönüştürülmemiş LocalDateTimebir bağlamda istedikleri kadar aritmetik yapmaya ve sonra geri dönüştürmeye teşvik ediyoruz .

  • Noda Time, kalıtımı daha az kullanır - Joda Time'daki hiyerarşiler çok derin ve karmaşıktır. Noda Time'ın birçoğunun değer türlerine dayandırılması aslında bunu zaten zorlamaktadır, ancak hala sınıf mirasını kullandığımız bazı yerler vardır, ancak miras hiyerarşisini önemli ölçüde daraltmayı başardım ... çoğu zaman pahasına değerli görmediğim esneklik :)


Bağlantı koptu ...
Pacerier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.