i18n API implementation issues

Nebojša Ćirić cira at google.com
Wed May 18 18:17:05 PDT 2011


One more question wrt. private implementation.

Is it enough if I name it say LocaleInfo.DateTimeFormat__ and not include it
in the public API list in the proposal?

Looking around web I found ways to make things truly private, but there was
price to pay (see
http://stackoverflow.com/questions/55611/javascript-private-methods).

18. мај 2011. 17.55, Allen Wirfs-Brock <allen at wirfs-brock.com> је
написао/ла:

>
> On May 18, 2011, at 5:06 PM, Nebojša Ćirić wrote:
>
> >
> > If I remove constructor LocaleInfo.DateTimeFormat  where would I put
> LocaleInfo.DateTimeFormat.prototype.format() method for example (I would
> gladly remove the duplication, but I am not sure how)? Right now I do:
> >
> > LocaleInfo.prototype.dateTimeFormat(settings) {
> >   return new LocaleInfo.DateTimeFormat(settings, this);
> > }
> >
> > and
> >
> > LocaleInfo.DateTimeFormat = function(settings, locale) {
> > }
> >
> > does actual work of creating the new object.
>
>
> Clearly I'm being sloppy by having first not read your entire API; but of
> course actually developer also probably will jump in without reading
> everything so may it isn't such a bad approach....
>
> I would expect that the LocaleInfo instance you obtained (I'll call it
> locale) has been instantiate for some specific "locale"  (in quotes I mean
> the abstract concept of some specific locale). In other words locale
> encapsulates all the knowledge that is needed to perform operations in some
> specific "locale" context.  Part of that encapsulated knowledge is what kind
> of DTF to use by default for that "locale" or how to selection from a set of
> possible DTFs based upon requested settings.   In practice you might only
> have one "class"  that implements DTF  or  you might have several but that
> really is an implementation that should be hidden inside locale.
>
> I would then expect to see an implementation something like this:
>
> LocaleInfo.prototype.dateTimeFormat(settings) {
>  return new this.__internalDTFProvider(settings, this)
> }
>
> Now that I have written this, I see the more concise answer:
>
> The concrete "class" that implements a specific DTF should be a private
> implementation detail.  It doesn't have to have a public constructor API
> because the constructor is called from within the  dateTimeFormat method.
> The instances of such private DTF constructors support the public DTF
> instance API.  In other words that have methods such as format.  The actual
> implementation of format would hang-off of the prototype object associated
> with such private DTF constructors.
>
> Here is a third way to state it:
>
> LocaleInfo is a constructor that has a public API that is used to create
> (or access) LocaleInfo objects.
> localeInfo instances have a public API (essentially the public properties
> of LocaleInfo.prototype) that give access to various kinds of objects
> including objects that support the DTF interface
> DTF objects implement the DTF public API including format
> The constructor(s) for DTF objects is an implementation detail and doesn't
> need a public API
>
> allen




-- 
Nebojša Ćirić
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20110518/40687cdd/attachment.html>


More information about the es-discuss mailing list