develooper Front page | perl.datetime | Postings from January 2003

Re: Parser Interface (Was Re: Picking up the ball)

Thread Previous | Thread Next
Dave Rolsky
January 13, 2003 19:14
Re: Parser Interface (Was Re: Picking up the ball)
Message ID:
On Mon, 13 Jan 2003, Matthew Simon Cavalletto wrote:

> >> What's the benefit of making this distinction between core and
> >> "other" formats?
> >
> > Because "core" parsing would be available simply by doing:
> >   use DateTime;
> We can move the parsing to format modules and load them automatically.

Sure, that's possible too.  The real question is whether or not parsing
requires anything beyond doing "use DateTime".

> > It's really a question of whether or not users must load another
> > module to do parsing, that's all.
> The suggestion on the table is that even the "core" parsing be placed
> in another package, but that this be transparent to end-users.

But that's not my concern.  I _don't_ want to discuss implementation of
this.  I want to talk about the API!

> > Actually, I have some ideas for this. [...] the parsing modules would
> > just add methods to the DateTime namespace.
> Ick -- what's the advantage of doing it this way?
> It strikes me as a lot more logical to keep those methods in their own
> namespace and simply call them when needed.
> Looking at the two alternatives, does the second really seem clearer?
>    use DateTime;
>    my $dt = DateTime->new( 'MySQL' => $mysql_dt );
>    print $dt->to_string( 'MySQL' );
>    use DateTime;
>    use DateTime::Parse::MySQL;
>    my $dt = DateTime->from_mysql_datetime( $mysql_dt );
>    print $dt->to_mysql_string();

Um, yeah, the second is _much_ clearer.  And its less error prone as well!

If I mis-type 'MySQL' as 'Mysql' then what is DateTime supposed to do?
And how is DateTime->new supposed to know about all the myriad parameters
that would exist with your suggestion anyway?  If it finds an unknown
parameter, should it call "DateTime::Parse->$param()"?  What if a specific
parser needs _two_ params?

Your first option is not on the table.  The options on the table are:

  use DateTime;
  use DateTime::Parse::MySQL;
  my $dt = DateTime->from_mysql_datetime( $mysql_dt );
  print $dt->to_mysql_string();


  use DateTime;
  use DateTime::Parse::MySQL;
  my $dt = DateTime::Parse::MySQL->new_datetime( $mysql_dt );
  print DateTime::Parse::MySQL->mysql_datetime( $dt );

Frankly, I think the first one is a lot easier to use and makes more
sense.  It's the decorator pattern without the dispatching overhead!


House Absolute Consulting

Thread Previous | Thread Next Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at | Group listing | About