Pawel,
This may be a somewhat biased opinion, but in my experience, decorating only comes into play when you start using templates. So, if you render the bulk of your page on the server side (like a lot of Google's products do, presumably for faster page loads on older browsers), you're probably going to use lots of decorating, and you'll need to write your own components so they support decorating, too.
If you render the bulk of your page on the client side, such that your servers basically only send down page containers, then you're probably going to use lots more rendering. Moreover, if your components use templates (which tend to be pretty handy), then the most sensible thing tends to be that you couple each component to a template. And once you've done that, you've pretty much committed to writing components that can be rendered, but not generally decorated. (It's just less duplicate logic).
All this said, even in this scenario, decorating is really handy for installing Google's own components inside of your own. So, you might have a template like:
{template .buttonTray}
<div class="my-button-tray">
<div class="left-button goog-link-button">Left</div>
<div class="middle-button goog-link-button">Middle</div>
<div class="right-button goog-link-button">Right</div>
</div>
{/template}
and a component with methods like:
Tray.prototype.createDom = function() {
this.element_ = soy.RenderAsFragment(...);
};
Tray.prototype.enterDocument = function() {
goog.base(this, 'enterDocument);
var dom = this.getDomHelper();
var el = this.getElement();
this.linkChildren_ = [];
goog.array.forEach(['left', 'middle', 'right'],
function(name) {
var linkEl = dom.getElementsByTagNameAndClass(
'div', name + '-button', el
);
goog.asserts.assert(linkEl);
var link = goog.ui.decorate(linkEl);
link.setModel(name);
link.setParent(this);
this.linkChildren_.push(link); // save these off so we can dispose of them on exit...
});
this.getHandler().listen(goog.ui.Component.EventType.ACTION, this, this.handleButtonAction);
};
Hope it helps,
HJB