Joda-Timeの使用を検討しています。
インターフェイスが返すオブジェクトの種類に注意を払う必要があるかどうか疑問に思っています。
サービスレイヤーのインターフェイスシグネチャからJoda-Timeオブジェクトを返すということは、それを使用するすべてのモジュールが、共通のjava.util.DateAPIではなくJoda-Timeに依存することを意味します。
アプリモジュールの周りにJodaオブジェクトを渡しますか、それともアプリの特定の部分にラッパーを記述しますか?
4 に答える
代替手段は何ですか?jodaTimeオブジェクトを悪名高いCalendar/Dateオブジェクトに変換しますか?
あなたはこれらのオブジェクトを取り除くことを選択しました、そしてそれは良い決断です。ここで、他のレイヤーにjava date APIを使用させると、jodaTimeを使用して除去した種類のバグや無意味な動作が発生します。
私はあなたがあなたのユーザーに好意を示し、彼らにjodaTimeを使わせるべきだと思います。
もちろん、コードにjodaTimeへの依存関係を追加するのは設計上の決定ですが、jodaTimeを選択してより少ない、より良いコードを作成することを選択したので、疑わしいとは思いません。
最初は、最も適切なタイプ(この場合はJodaオブジェクト)のみを返します。
誰かがそれに問題を抱えていることを知った場合(おそらくあまり頻繁には起こらないでしょう)、インターフェースにコンバーターメソッドを追加します(つまり、getTime()
今getJavaTime()
、またはgetTimeInMillis()
)。
Object
または、オブジェクトを受け取り(実際のJodaクラスをインポートしなくても、コード内の任意の場所として不明なインスタンスを扱うことができます)、プレーンJavaオブジェクトを返す汎用ヘルパーメソッドを追加します( java.util.Date
)。
今:Joda-Time
可能な限り、Joda-Timeを使用してください。Joda-Timeに精通していない他のクラスとデータを交換するために必要な場合は、java.util.Dateに変換します。
java.util.Dateからorg.joda.time.DateTimeに移動するには、DateをDateTimeコンストラクターに渡します。
DateTime myDateTime = new DateTime( myDate );
DateTimeからDateに移動するには、次のtoDate
メソッドを呼び出します。
Date myDate = myDateTime.toDate();
将来:JSR 310
Java 8は、JSR 310によって定義されたjava.time。*クラスをもたらします。これらのクラスは、Joda-Timeに触発されましたが、完全に再設計されています。
プロジェクトがJava8以降でのみ使用される場合は、Joda-Timeではなくこれらを使用してください。Joda-Timeは、古いバージョンのJavaでも引き続き有用であり、Joda-Timeは引き続き維持されます。ただし、java.time。*クラスは、Joda-Timeクラスとjava.util.Date/Calendarクラスの両方に取って代わることを目的としています。
他のクラスとフレームワークがjava.util.Date/Calendarの使用法をjava.time。*に置き換えるように更新されると、あなたの質問は最終的には議論の余地があります。
クライアントライブラリがAPIで何をするかによっては、ミリ秒のタイムスタンプのみを使用することを選択できます。他のすべては、渡す価値があるかもしれないし、価値がないかもしれない表現です。ライブラリが人間の操作可能な方法で日付と時刻の表現を支援することを目的としている場合は、Jodaを使用すると、Java8でもほとんど同じように機能する可能性があります。ライブラリが日付との計算に精通している場合は、ミリ秒単位の時刻を交換し、クライアントに任せて、好きなものを使用します。