| Summary: Traz um ponto de vista sobre Ext Extensions e Plugins, e auxilia você a decidir se desenvolve uma extensão ou um plugin. |
| Author: Jozef Sakalos |
| Published: April 20, 2009 |
| Ext Version: 2.x |
Languages: English Chinese Korean
|
Contents |
Acredito que muitos usuários de Ext já pensaram em adicionar a uma classe uma funcionalidade customizada que não está presente na biblioteca Ext. Algo que é específico às suas aplicações, ou não tão específico de forma que outras pessoas também poderiam se interessar por essa funcionalidade.
OK, temos a idéia, sabemos o que o novo código deve fazer, sabemos até mesmo como desenvolvê-lo, mas o que devemos escrever? Uma Extensão ou um Plugin?
O fato de estarmos discutindo sobre eles juntos, e o fato de podermos estar indecisos sobre qual utilizar, faz deduzir que eles devem ter algo em comum. Verdade, eles têm. Ambos adicionam alguma funcionalidade a uma biblioteca existente ou modificam um componente da biblioteca.
Nem a extensão e nem o plugin podem existir sozinhos; eles precisam ter um componente, uma classe, que eles estendem ou na qual são inseridos.
Uma extensão (no mundo Ext) é de fato uma classe derivada. Vamos imaginar que temos uma classe base com alguns métodos genéricos na qual queremos adicionar alguns métodos mais específicos. Então, utilizando o framework de herança de uma biblioteca ou linguagem, criamos uma nova classe que contém tanto os métodos da classe base quanto os novos métodos adicionados.
Escolhemos uma classe Ext existente, estendemos ela utilizando a função Ext.extend, e o resultado é uma nova classe com um novo nome. Por exemplo:
MyExtension = Ext.extend(Ext.Panel, {/* objeto com novas propriedades e métodos */});
Posteriormente, quando precisamos de um objeto:
var myExtension = new MyExtension({/* objeto de configuração opcional */});
Um plugin, por outro lado, não precisa de nenhuma classe Ext existente. Embora plugins freqüentemente estendam a classe Ext.util.Observable, isso não é obrigatório; eles podem ser escritos do zero. Claro, desenvolver um plugin sem ter um alvo no qual inseri-lo não faz sentido, então sempre desenvolvemos plugins para uma classe Ext existente: panel, form, grid, data view, etc.
Por exemplo, criamos um plugin como:
MyPlugin = function() {/* código */};
E o utilizamos dessa forma:
var myPanel = new Ext.Panel({ plugins: [new MyPlugin({/* objeto de configuração opcional */})] ,// restante da configuração do myPanel });
Depende... Você pode muitas vezes alcançar o mesmo resultado com uma extensão ou um plugin. Às vezes ocorre que um programador gosta mais de plugins, então ele desenvolve um plugin; ou ele gosta mais de extensões, então ele desenvolve uma extensão. De qualquer modo, plugins são mais apropriados para adicionar funcionalidades menores, enquanto extensões são mais apropriadas para adicionar funcionalidades mais complexas. Plugins podem ser facilmente removidos dos componentes; extensões são normalmente mais amarradas às aplicações.