On 07/12/2012 12:07 PM, Yuval Sadan wrote:
    I think we need to realize that a lot of the APIs that have been
    designed in the past aren't terribly good APIs.

The IndexedDB API is rather new, and the manner in which it consistently uses 
event handlers on returned objects is rather innovative. The
DOMTransaction object is more similar to that.

    In other words, I think it's more important to focus on what makes a
    good API, than what is consistent with other DOM APIs.

Consistency has its value. Even if some is lacking, fixing it in some places 
and not in others might cause a jumble. Which is my feeling actually
about the IndexedDB API. Adding more syntactical variations can lead to hectic 
code.
However, I agree that it's not the primary concern.

    Something that I really liked about the old API was the fact that
    using it created very intuitive code. Basically you just write a class
    the way you normally would write a class, and then pass in your
    object:

    x = {
       someState: 0,
       apply: function() { this.someState++; this.modifyDOM(); },
       unapply: function() { this.subState--; this.modifyDOMOtherWay(); },
       ...
    };
    undoManager.transact(x);


    You can even do things like

    undoManager.transact(createParagraphTransaction(params));

How's that different from:
function createParagrahTransaction(params) {
   x = new DOMTransaction("Create paragraph");
   x.apply = function() { ... use params... };
   x.onundo = function() { ... use params ... };
   return x;
}

Also, in your example, I think that in the JS-object proposal you won't be able 
to reference the original object's properties -- it will be lost, and
'this' is window.

'this' would be the object, not window when callback object is used.



    The fact that we have to choose between creating APIs that feel like
    "DOM APIs" or "JS APIs" I think is an indication that "DOM APIs" are
    doing things wrong. There should be no difference between "DOM APIs"
    and "JS APIs".

It is a problem. But WebIDL and JS aren't two of the same.


Reply via email to