On Mon, Dec 5, 2016 at 9:49 AM, Sergiu Dumitriu <sergiu.dumit...@gmail.com>
wrote:

> I agree with Michael here, this direction is against what "pure"
> Velocity is about. The generic tools shouldn't be allowed to fetch
> random resources off the internet.
>

I'm with Claude here. Making powerful tools available is a good thing. If
we were putting this in Engine, i'd protest. Even in VelocityView, clearly
for webapps, it would seem an inappropriate default. But in GenericTools, i
think it fits fine. They are to be generic, useful. Velocity is not just
about MVC, not just used in applications.


> I'm also against propagating the dependency on DOM4J, a library which
> has been dead for ten years.
>

Well, those who do the work should decide, but if i were doing the work,
yeah, dom4j does smell a little. ;) Though arguably we can hardly be too
critical of old, little-update libraries.


> I'm OK with adding tools for working with JSON and XML, as long as they
> perform safe operations on local data, and use modern libraries for the
> generated data structures (org.json:json and the org.w3c.dom package,
> although it's not very user friendly).
>
> On 12/04/2016 07:57 AM, Michael Osipov wrote:
> > Am 2016-12-02 um 10:01 schrieb Claude Brisson:
> >> Hi.
> >>
> >> On 01/12/2016 21:21, Michael Osipov wrote:
> >>> While I understand you idea, I do think that introducing stuff like
> >>> this a bad idea for several reasons:
> >>>
> >>> 1. Processing of structured, low-level data like XML, JSON, form data
> >>> always belongs to a controller and not to the view layer. The view
> >>> layer should always receive a minimal set of high-level structures to
> >>> do its task.
> >>
> >> I'm well aware of this MVC design paradigm. But the underlying purpose
> >> is the separation of concerns, not the fact that the view should be fed
> >> its data like a baby. View layers have grown up, and pull models have
> >> proven their efficiency. Since they are more lightweight and flexible,
> >> they are far more maintainable.
> >>
> >> More specifically, let say for instance that someone wants to build a
> >> webapp and a native mobile app on a common model layer. He would
> >> typically publish his model in the form of an API returning JSON
> >> structures. They cannot be called low-level, because the raw data model
> >> has already been somehow digested in the API presentation logic. Each
> >> API author is trying to guarantee minimal ergonomics. So if I have, say,
> >> the following JSON:
> >>   { '"books" : [ { "author": "Lewis Caroll", "title": "Alice in
> >> Wonderland" } , { "author":"Saint-Exupéry", "title":"le Petit Prince"
> >> } ] }
> >> what you're saying is that it's not high-level enough for the view? I
> >> can't agree.
> >
> > I do not consider this good application design unless I see a specific
> > case where it truly makes sense. Having a browser/client-only app
> > implies using JavaScript, thus Velocity will be a little of use. E.g.,
> > Sonatype Nexus does that. Render skeleton by Velocity, rest is done in
> JS.
> >
> > In this very example, this is not high-level. High-level for me is a
> > complete abstraction of the serialization format, Java structures only.
> > Pretty much like with Eclipse MOXy or Jackson, they support multiple
> > formats and the templater user/designer does not really care about the
> > format.
> >
> >>> 2. You are turning a template engine into a scripting engine which
> >>> Velocity is not.
> >>
> >> Since a bare scripting engine doesn't know how to do templating, I think
> >> you intended to say that I'm empowering Velocity with scripting
> >> abilities. Well... it's already the case. And another thing: I've seen
> >> environments where people made a complete mess of their view layer
> >> without using a single scripting functionality. My point here is that
> >> although we ought to remain attentive to what the language offers,
> >> trying to limit the features is not the right way to promote the
> >> separation of concerns.
> >
> > I agree here, my concern is rather not to introduce features which will
> > people encourage to abuse Velocity for tasks it has not been designed
> > and knowning that their are better suited tools for this.
> >
> >>> 3. By having opening the door for #read("http..") people will start to
> >>> ask for: How do I set credentials, how do I add request headers, how
> >>> do I add my company's proxy, etc? At the end, you will find yourself
> >>> implementing stuff people have already done several times.
> >>
> >> If I understand correctly, you consider that the existing ImportTool is
> >> already wrongful. The door is already open.
> >
> > Unfortunately, it is.
> >
> >> I already had in mind to disallow absolute URLs in safe mode (which is
> >> on by default) for the view versions. This is already the case for the
> >> actual XmlTool, but not for the ImportTool. My plan is to homogeneize
> >> all that: the XmlTool generic version would be relaxed by my proposal,
> >> while the view version of the ImportTool would be restricted to relative
> >> URLs in safe mode.
> >
> > Sound good.
> >
> >> I totally agree that fetching an external resource is dubious in the
> >> view layer of an MVC webapp. But regarding the generic versions, where
> >> only absolute URLs make sense, I think it's not our job to try to
> >> prevent bad designs for some by refusing features to others.
> >
> > While this is right, we still should try to promotive well-proven and
> > predictable approaches for the use of Velocity.
> >
> >>> 4. and likely more.
> >>>
> >>> The very same idea has been implemented on a lower level by the Plexus
> >>> Resouce Loader [1] which in turn is used in LICENSE.vm in Maven [2]
> >>> and guess what, every time someone tries to build Maven inside a
> >>> company with a proxy, he/she waste some time to figure out why the
> >>> build is hanging. One simple reason: the implementation so simple that
> >>> you can't provide a proxy host to reach external hosts. What a pain!
> >>
> >> It's bad design. And you're story illustrates something: if we don't
> >> provide people with such tools, they'll write them and it will be worse.
> >
> > That's absolutely true, though functionality should be still limited to
> > avoid frustration and unnecessary support from us.
> >
> >>>
> >>> In that spirit, keep the tools as simple as possible and as offline as
> >>> possible.
> >>
> >> Tools should do their job. That's the spirit. Their syntax and their use
> >> should be kept as simple as possible, but I really don't see why they
> >> shouldn't do complex things. I wonder how you'll react the day I will
> >> want to integrate Velosurf as a ModelTool in a future version...
> >
> > Just checked Velosurf, really sick stuff (meant positively).
> > Velosurf isn't probably the best name for that because it says not much
> > about its objective. I am quite certain that there is a usecase for that
> > where you have some command line tool to auto generate data from a
> > database, but not from a web application from my point of view. It
> > pretty much defeats any time of encapsulation and testing capabilities.
> >
> > At the end, Velocity is a general purpose template engine, there are
> > tools which make sense in a web environment and which in a different
> > mode only.
> >
> >>> I would even go with the XML support available in Java. the DOM4J
> >>> support was added in times where Java's native XML support was lousy.
> >>
> >> You may be right here, and that would be more easier than use DOM4J
> >> shading, but I'm not sure at all I'll find the time and motivation to
> >> rewrite the XmlTool.
> >
> > You should at least track that as a JIRA issue.
> >
> >
> > Michael
> >
>
> --
> Sergiu Dumitriu
> http://purl.org/net/sergiu
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@velocity.apache.org
> For additional commands, e-mail: dev-h...@velocity.apache.org
>
>

Reply via email to