WebPatterns

Acabo de ver nas Sinistras:
WebPatterns.org

Já faz algum tempo que todo bom programador trabalha com Design Patterns. A idéia é bastante simples: a grande maioria dos problemas de programação são muito parecidos. Se você parar para observar, vai notar que já resolveu muitas vezes o mesmo exato problema. A aplicação era diferente, os nomes das classes eram diferentes, mas a estrutura do problema era exatamente a mesma.

Vamos dar um exemplo de um pattern de estrutura que eu uso muito: o adapter. Veja o diagrama UML:
Pattern Bridge - Gof

Imagine que você tem um sistema em que há uma interface file, que tem um método read() que retorna o conteúdo do arquivo. Existem várias classes da interface file, uma que lê arquivos locais, outra que lê arquivos no subversion, outra que lê páginas web e até uma que lê itens em arquivos RSS. Agora seu chefe te pede para integrar o sistema a outro, um wiki corporativo. O sistema de wiki tem uma classe Page que faz tudo o que suas classes file fazem, mas os nomes dos métodos são diferentes. Ao invés de read() o método se chama get_content().

O que fazer? Reescrever a classe do wiki? Claro que não! Você certamente tem uma solução mais simples. Mas, acredite se quiser, já vi muita gente abrir a classe que não implementa a interface e copiar cada método mudando o nome! Bom, a solução que qualquer programador experiente daria seria criar uma classe que fizesse a adaptação, assim:

class PageAdapter:
    '''Adapta wiki.page para funcionar como file'''
    def __init__(self):
        self.page=wiki.Page()
    def read(self):
        return self.page.get_content()

Se você não fala Python, existem algun bons exemplos em C# aqui.

Vamos dar um nome a cada personagem em nosso problema. As classes que já existem no seu sistema e que usam os objetos file são seus Clients. A interface file é o Target. A classe Page é o Adaptee e a PageAdapter é o Adapter. Olhe novamente agora o diagrama UML e veja como é simples. A classe Client usa um Target (file). Adapter (AdapterPage) é um Target (file). Adapter (AdapterPage) usa um Adaptee (Page), “traduzindo” seus métodos para a Client.

Ao dar nome aos elementos e criar um diagrama UML do problema você se acostuma com a solução. Da próxima vez que você vir uma classe que faz a mesma coisa que uma interface que você já usa, automaticamente vai pensar: “acho que preciso de um adapter…”

Isso também inibe programadores novatos de “inventar” solução exotéricas, principalmente as do tipo CTRL+C CTRL+V, para problemas que já foram solucionados com sucesso um milhão de vezes antes.

A idéia do WebPatterns.org é que poderíamos reaproveitar nossa genialidade se tivermos patterns específicos para a web. Quase todo programador que chega ao assunto chega através de Design Patterns, que são os padrões de solução de problemas ao projetar software (e, por isso mesmo, são geralmente expresos em UML.) Mas já faz algum tempo que ouço falar de patterns de análise, de arquitetura, de interface com o usuário (onde a coisa vai entrar na área dos webdesigners e arquitetos de informação.) E agora estão surgindo patterns no projeto de aplicações web. Veja, por exemplo, esta lista. São patterns para quando estiver fazendo o planejamento dos conteúdos e funcionalidades de um site. Os microformats, por outro lado, são patterns para quando você estiver escrevendo seu HTML[bb].

A idéia é boa. Quanto mais ordem pudermos colocar nesse caos que é o desenvolvimento web, melhor.

Publicado por

Elcio

Elcio é sócio fundador da Visie Padrões Web. Pioneiro no uso e divulgação dos padrões do W3C no Brasil, Elcio já treinou equipes de dezenas de empresas como Globo.com, Terra, Petrobras, iG e Locaweb. Além disso, tem dirigido as equipes da Visie no desenvolvimento de projetos web para marcas como Brastemp, Itaú Unibanco, Johnson & Johnson e Rede Globo.

Um comentário em “WebPatterns”

  1. Fala Élcio… tudo bem!?!?

    Interessante essa história de Web Patterns. Cara vou te pedir uma ajuda aqui. Eu programo Php, mas não sou nada hard. Estoiui me aventurando no Rails agora, mas bem de leve por enquanto. Vc tem alguma coisa pra me indicar para eu pegar mais o jeito de programação? Tipo coisas básicas que vão me ajudar em qualquer linguagem!?!

    Valeu e um abraço!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *