I can definitely see 4 dimensions as useful:  page name, locale, device,
skin.

It seems to me that the you do need a object that encapsulates:
1) the key used to uniquely identify the page (with the given page name,
locale, 3rd, 4th).
2) The algorithm used to locate resources appropriate to the key

I think "Dimensions" is not the right name for this, but "Selector" may be
part of it.

I think this change to API should also encapsulate (or at least, not rule
out later) the task of allowing templates to live outside the web context or
class path, i.e., from a database or other external source (which brings
with it the challenge of dealing with invalidations of that external data).

public interface PageSelector
{
  Object getCacheKey();

  Resource findSelectedResource(....);
}

So where the page name and locale is passed around today, we'll want to pass
around the PageSelector and, as we identify resources (such as properties
files or template files), the findSelectedResource() method can be used.

Message catalogs are tricky, because we search for multiple versions AND
there's a hierarchy.  Do other dimensions, besides locale, play a part here?
 Can we inject other dimensions, as we do the Locale?

It can be a big can of worms!
On Thu, Nov 4, 2010 at 9:50 AM, Igor Drobiazko <[email protected]>wrote:

> Right now I have a custom implementation of ComponentTemplateLocator
> service
> which is responsible to locate the template from a subfolder. The name of
> the subfolder is the name of the dimension.
>
> I guess what is needed is a "DimensionsProvider" which defaults to two
> dimensions. This service is then used for caching and template locating. If
> needed, app developers may provide their own implementation of the service
> to add more dimensions.
>
> Maybe the unlimited number of dimension is kind of over-engineering.
> Probably it is sufficient to habe 3 or 4 dimension, as you sugessted. What
> do you think?
>
> On Thu, Nov 4, 2010 at 1:42 AM, Howard Lewis Ship <[email protected]>
> wrote:
>
> > Seems like there's some other work down the line ... for example, if you
> > hook in a "device" dimension into the cache (*) then how does that new
> > dimension travel down to the code that identifies the correct template?
> >
> > I think this is a good idea but it's something that should be Done Right.
> >
> > I also can't help but wonder if this doesn't overlap with the frequent
> > request to get templates from the database ... which itself introduces
> the
> > challenge of determining when a database-originated template has changed.
> >
> > (*) The current dimensions are page name and request locale.  It seems
> > reasonable to add a 3rd or perhaps 4th dimension.
> >
> > On Wed, Nov 3, 2010 at 4:20 PM, Igor Drobiazko <[email protected]
> > >wrote:
> >
> > > Hi there,
> > >
> > > Tapestry tries to cache a lot of objects like page and component
> > instances,
> > > template object, which are expensive to build. Currently the cache keys
> > > consist of a page/component name + locale or class name + locale.
> > >
> > > I have a very important use case to create some custom keys that allow
> me
> > > to
> > > store more instances into the cache. For example I need not only
> > > locale-specific instances (like MyPage-en, MyPage-de), but also
> > > device-specific or customer-specific page instances (like
> > MyPage-iphone-en,
> > > MyPage-iphone-de, MyPage-de) .
> > >
> > > So, I would like to add a new public service in 5.3 (e.g.
> > CacheKeyProvider
> > > or similar) which will be used by PageSource, PageLoader,
> > > ComponentTemplateSource to create cache keys that are not limited to
> > > locale.
> > >
> > >
> > > Any thoughts? Any objections? Any feedback is appreciated as these
> > feature
> > > is very important for me. Right now I would work on the internal API,
> but
> > I
> > > want to make sure the will be public API for it in the future.
> > >
> > > --
> > > Best regards,
> > >
> > > Igor Drobiazko
> > > http://tapestry5.de
> > >
> >
> >
> >
> > --
> > Howard M. Lewis Ship
> >
> > Creator of Apache Tapestry
> >
> > The source for Tapestry training, mentoring and support. Contact me to
> > learn
> > how I can get you up and productive in Tapestry fast!
> >
> > (971) 678-5210
> > http://howardlewisship.com
> >
>
>
>
> --
> Best regards,
>
> Igor Drobiazko
> http://tapestry5.de
>



-- 
Howard M. Lewis Ship

Creator of Apache Tapestry

The source for Tapestry training, mentoring and support. Contact me to learn
how I can get you up and productive in Tapestry fast!

(971) 678-5210
http://howardlewisship.com

Reply via email to