Передача объектов Joda Time между слоями приложения - PullRequest
6 голосов
/ 12 марта 2010

Я рассматриваю возможность использования Joda-Time .
Мне интересно, стоит ли мне обращать внимание на тип объекта, который возвращают мои интерфейсы.
Возвращение объектов Joda-Time из моей подписи интерфейса на сервисном уровне означает, что каждый модуль, который его использует, будет зависеть от Joda-Time вместо общего java.util.Date API.
Вы передаете объекты Joda вокруг своих модулей приложения или пишете обертки для определенной части вашего приложения?

Ответы [ 4 ]

4 голосов
/ 12 марта 2010

В начале возвращает только наиболее подходящий тип (в данном случае Joda Objects).

Если вы узнаете, что у кого-то есть проблема с этим (что, вероятно, не будет происходить слишком часто), либо добавьте метод преобразования в интерфейс (например, у вас есть, например, getTime() и теперь getJavaTime() или * 1005). *).

Или добавьте вспомогательный метод общего назначения, который принимает объект (вы можете трактовать неизвестный экземпляр как Object в любом месте кода без необходимости импорта реальных классов Joda) и возвращает простой Java-объект (java.util.Date).

4 голосов
/ 12 марта 2010

Какая альтернатива? Преобразование объектов jodaTime в печально известные объекты Calendar / Date?

Вы решили избавиться от этих объектов, и это хорошее решение. Теперь, если вы позволите другим слоям использовать API Java-дат, они будут сталкиваться с ошибками и бессмысленным поведением, от которых вы избавились с помощью jodaTime.

Я думаю, вы должны оказать своим пользователям услугу и позволить им использовать jodaTime.

Конечно, это дизайнерское решение, которое добавит в их код зависимость от jodaTime, но я не нахожу это сомнительным, так как вы выбрали jodaTime, чтобы писать меньше и лучше кода, и они тоже должны это делать.

0 голосов
/ 22 декабря 2013

В зависимости от того, что вы ожидаете от клиентских библиотек с вашим API, вы можете использовать только метки времени в миллисекундах. Все остальное - представление, которое может или не может стоить передавать. Если ваша библиотека предназначена для помощи в представлении даты и времени в удобной для человека форме, используйте Joda, и она может работать почти так же в Java8. Если ваша библиотека больше интересуется датами, просто поменяйте время в миллисекундах и предоставьте клиенту возможность использовать все что угодно.

0 голосов
/ 22 декабря 2013

Сейчас: Joda-Time

По возможности используйте Joda-Time . Преобразование в java.util.Date, где требуется для обмена данными с другими классами, которые не разбираются в Joda-Time.

Чтобы перейти от 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 содержит классы java.time. *, Определенные в JSR 310. Эти классы были вдохновлены Joda-Time, но полностью перестроены.

Если ваш проект используется только в Java 8 или новее, используйте их, а не Joda-Time. Joda-Time по-прежнему полезен на старых версиях Java, а Joda-Time все еще поддерживается. Но классы java.time. * Предназначены для замены классов Joda-Time и java.util.Date/Calendar.

Ваш вопрос со временем станет спорным, поскольку другие классы и фреймворки будут обновлены, чтобы заменить использование java.util.Date/Calendar на java.time. *.

...