Porém uma coisa me incomodava no uso dessa classe. Para cada observador registrado eu precisava dentro do método update verificar se ele precisava agir de acordo com a URL. Isso acaba por tornar o código mais confuso pois obrigava-nos a misturar validações e lógica de negócio. Veja um exemplo abaixo:
var observadorBusca = { update:function(url) { if( url.indexOf("#busca=")!=-1 ) { //Executa a busca } } }; var observadorLink = { update:function(url) { if( url.indexOf("#link=")!=-1 ) { //Executa o link clicado } } }; TralhaController.addObserver(observadorBusca); TralhaController.addObserver(observadorLink);
Para tentar melhorar isso, pus a mão na massa e alterei o TralhaController permitindo registrar observadores que só fossem notificados diante de URLs que tivessem o padrão desejado. Utilizando então a última versão da biblioteca o código acima poderia então ser alterado para ficar da seguinte forma:
var observadorBusca = { update:function(url) { /* Executa a busca */ } }; var observadorLink = { update:function(url) { /* Executa o link clicado */ } }; TralhaController.addObserver("\\#busca\=.*", observadorBusca); TralhaController.addObserver("\\#link\=.*", observadorLink);
Bem mais simples certo? É claro que há aqueles que não são muito fãs de expressões regulares e vão achar a primeira forma melhor. Para esses não há problema pois a forma antiga continua funcionando. Observadores registrados sem padrões continuam sendo notificados a toda e qualquer modificação de URL.