- From: Peter Meyer <petermeyer99@hotmail.com>
- Date: Mon, 19 Mar 2001 23:53:32 -0000
- To: www-dom@w3c.org
Hello DOM-World,
After working for a while with DOM2 and looking over the spec of DOM3, it
still seems that there is no way to perform a truly object-oriented
traversal of a DOM tree. Using the existing model, I can not see a way to
traverse the DOM without actually using a switch statement based on node
type.
This seems to me a fairly non-scalable, hard-to-maintain and inelegant way
to traverse a tree of objects. I am sure it has been considered by the W3C
to add the ability to use a visitor pattern or a similar object oriented
design pattern for traversal to the node interface. I would like to
understand why it has been decided against such an addition.
Given that the DOM is also used in many XML applications, the ommission of a
good object oriented mechanism is particularly problematic.
In such an application it is likely that a class factory is used to create
particular subclasses specific for each element type, providing specialized
functionality for the application actually building the DOM from an XML
file. Using a switch statement to call specialized functionality on
traversal is, in my humble opinion, a very unsatisfactory way of action. Yet
with the current DOM design there seems to be no alternative.
Please consider the addition of a simple visitor pattern interface to the
node interface. After all, it is an extremely simple addition that can
safely be ignored by anybody who does not desire to use it, yet permits to
use the DOM as a primary configurable data structure in a larger scale OO
application.
Thanks!
PM
P.S:
The visitor interface would require:
In the node interface:
A method
accept(IVisitor v);
A new interface IVisitor which contains one method:
execute(Node n);
Implementations:
In a reference implementation of a class that implements the node if, this
function would just be like this:
public void accept(IVisitor v)
{
v.execute(this);
}
Subclasses of nodes that have children would additionally call
accept(v);
for each of their children.
Implementors of the IVisitor interface would implement overrides for execute
that take as an argument the particular subclass of the node interface they
are interested in.
_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.
Received on Monday, 19 March 2001 18:54:09 UTC