On Wed, Oct 21, 2009 at 7:20 AM, Derek Chen-Becker <dchenbec...@gmail.com>wrote:

> It sounds like you're pretty set against making separate impl traits and
> would prefer just putting things directly on TimeHelper. I'm OK with that,
> but I would really like to add a lift-joda module that contains the
> JodaHelpers, JodaTimeFormats and JodaTimeHelpers traits as I would like to
> use them. I should be able to delegate a good chunk of the methods to
> TimeHelpers.jt*, so there shouldn't be any *redundant* code. Is that a
> reasonable compromise?
>

Yes, as long as import Helpers._ is not incompatible with importing whatever
trait you come up with.


>
> Derek
>
>
> On Tue, Oct 20, 2009 at 11:35 PM, Derek Chen-Becker <dchenbec...@gmail.com
> > wrote:
>
>> I agree that the goal isn't to remove java.util.Date. For trivial time
>> handling it works just fine. What I'm trying to achieve here is a way to
>> make Joda Time be the default impl while leaving the user a choice. By using
>> separate traits instead of different names on the same trait, we achieve a
>> few things:
>>
>>    1. A consistent API for both java.util and Joda Time in terms of
>>    method names. As Naftoli pointed out, people expect naming of functions
>>    consistent with what they do and having two different "now"s on the same
>>    trait is going to look a little strange to people, I think.
>>    2. A clean *optional* usage of Joda Time. If we put code that utilizes
>>    Joda Time directly into TimeHelpers then it's not an optional dependency.
>>    Making a separate trait means that if someone doesn't use the Joda Time
>>    trait then they don't need to have the Joda Time jar in their classpath 
>> and
>>    they never know that it's not there.
>>    3. A relatively simple code change path to move from java.util to Joda
>>    Time by simply changing imports.
>>
>> Your assertion that Date is a simple wrapper for a Long timestamp is
>> pretty accurate, but really Joda Time's DateTime is a superset of
>> *Calendar*, not Date. Just look at what we had to do with CalendarExtension
>> to get some simple date manipulation functions, where those same methods are
>> already defined on DateTime. The vast majority of Joda Time's classes are
>> immutable, and the mutators return new instances instead of modifying the
>> current instance. TimeSpan's current handling of duration addition doesn't
>> cope with DST, which I'm sure will show up as a bug in someone's code if it
>> hasn't already. Having done a fair amount of java.util.Date handling and
>> then moving to Joda Time, I find it hard to call the difference between the
>> two APIs "marginal". In any case, I still feel that my proposal makes Joda
>> Time available in a nicer way while leaving existing code completely
>> untouched (by introducing a JodaHelpers trait that mirrors Helpers).
>>
>> Derek
>>
>>
>> On Tue, Oct 20, 2009 at 9:25 PM, David Pollak <
>> feeder.of.the.be...@gmail.com> wrote:
>>
>>>
>>>
>>> On Tue, Oct 20, 2009 at 6:56 PM, Naftoli Gugenheim <naftoli...@gmail.com
>>> > wrote:
>>>
>>>>
>>>> I agree with this.
>>>> My understanding is that the goal is that Lift should use Joda for its
>>>> time functions rather than java.util.
>>>
>>>
>>> This is not the goal.  The goal is to make JodeTime available.  There is
>>> no reason to remove support for java.util.Date.  None.
>>>
>>> JodaTime offers some advantages, but there's no reason, none, nada, to
>>> *remove* support for java.util.Date.
>>>
>>> I'm cool with different names (not jtNow, but choose something else).
>>>
>>> But I view removal of support for java.util.Date as gratuitous.  Sure, if
>>> we were to make the clean-slate decision today, I'd opt for primary support
>>> of JodaTime and secondary support for java.util.Date.  But we're making a
>>> decision based on legacy.  We're not going to cut off java.util.Date just
>>> because something marginally better (and I'm not being facetious here... at
>>> the bottom, these are just wrappers for number of milliseconds since Jan 1,
>>> 1970).
>>>
>>>
>>>> If the Joda methods have different and longer names, then it's existing
>>>> side by side with the java.util implementation, not replacing it.
>>>> To many people, it is important that methods etc. should be named
>>>> properly and aesthetically. It's not pleasant to use names like "jtNow" in
>>>> your code when that is the method that gets used normally. Sure, if 'now'
>>>> was the usual method and a 'jtNow' method was called in special
>>>> circumstances, it's an understandable name. But names that are used in
>>>> ordinary circumstances should have straightforward names.
>>>> (Names should be concise expressions of what they represent. This aids
>>>> in memorization and code readability.)
>>>> Also, it will be impossible to deprecate the java.util implementation
>>>> and have a clean API instead. If we use separate traits with the same 
>>>> method
>>>> names, then we will be able to.
>>>>
>>>>
>>>> -------------------------------------
>>>> Derek Chen-Becker<dchenbec...@gmail.com> wrote:
>>>>
>>>> On Tue, Oct 20, 2009 at 4:59 PM, David Pollak <
>>>> feeder.of.the.be...@gmail.com
>>>> > wrote:
>>>>
>>>> > What I checked in allows you to use JodaTime just as easily (well with
>>>> 2
>>>> > extra characters in a few method names) as java.util.Date.  How is
>>>> anything
>>>> > more "default" than that?
>>>> >
>>>>
>>>> My primary concern with this approach is that it makes changing between
>>>> the
>>>> two implementations something that requires a global search and replace
>>>> on
>>>> one or more method names, whereas having two different implementation
>>>> traits
>>>> means that generally I should be able to just change the import and the
>>>> code
>>>> will work. A secondary (minor) concern is that having method names
>>>> reflect
>>>> the underlying implementation details goes against my aesthetics.
>>>>
>>>>
>>>> > It's an interesting difference between an OO vs. non-OO.  In the
>>>> > implementation I created, there choice of one or the other is made
>>>> based on
>>>> > singleton methods invoked.  This allows mixing both in the same code
>>>> simply
>>>> > by invoking now or jtNow.
>>>> >
>>>>
>>>> I would argue that it's not a common case where you would want to use
>>>> both
>>>> libraries, particularly when Joda's DateTime has an explicit toDate on
>>>> it
>>>> that returns a java.util.Date. There are similar methods to return
>>>> Calendar
>>>> and TimeZone instances as needed. These are simple methods to use
>>>> directly,
>>>> or it's easy to create a view that handles this automatically.
>>>>
>>>> I'm unclear why this is not possible.  We can add a DSL for manipulating
>>>> > JodaTime without breaking anything we have.  The TimeSpan class simply
>>>> gets
>>>> > enhanced to deal with additional stuff and maybe uses JodaTime under
>>>> the
>>>> > covers.
>>>> >
>>>>
>>>> The underpinning of the current DSL is the TimeSpan class. Joda Time
>>>> already
>>>> has a time interval class corresponding to TimeSpan called Duration, but
>>>> the
>>>> more proper class to use is actually Period. Period is premised not on
>>>> ms
>>>> duration but rather on field deltas, which allows it to properly handle
>>>> DST.
>>>> Modifying the current DSL to work for Duration and Period via TimeSpan
>>>> is
>>>> just going to end up with a lot of redundant code, when a Joda-only DSL
>>>> would be cleaner and more in line with how you would want to use Joda
>>>> Time.
>>>>
>>>>
>>>> > They have that now with the implementation I did on your branch.
>>>> >
>>>>
>>>> Like I said before, I have a strong preference for the OO approach and
>>>> being
>>>> able to change impls by changing the import rather than having to change
>>>> methods all over the place. If you really feel strongly that we can't
>>>> have a
>>>> separate trait in Lift, I can just create a different artifact in my own
>>>> repo that tracks Lift and create the JodaHelpers, JodaTimeFormats and
>>>> JodaTimeHelpers traits there.
>>>>
>>>> Cheers,
>>>>
>>>> Derek
>>>>
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Lift, the simply functional web framework http://liftweb.net
>>> Beginning Scala http://www.apress.com/book/view/1430219890
>>> Follow me: http://twitter.com/dpp
>>> Surf the harmonics
>>>
>>>
>>>
>>
>
> >
>


-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to liftweb@googlegroups.com
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to