O mundo do software vem ficando cada vez mais amplo, abrangente e complexo. Se você olhar o universo abrangido por tecnologias como Java, verá que é difícil “enxergar até o fim de seu horizonte”.
Com isso, a curva de aprendizagem de tecnologias para desenvolvimento de software cresce muito. Em contrapartida vão surgindo iniciativas de melhores práticas e modelos prontos para simplificar situações comuns.
Duas forças nesse sentido da simplificação ou organização de situações comuns em software são os Patterns e os Frameworks.
Software Patterns são padrões conceituais que documentam a caracterização e a solução para problemas comuns (genéricos) de construção de software. Visam definir um idioma comum para estas situações (em vez de descrever a situação/problema/solução, você cita o nome dado a ela) e evitar que se “reinvente a roda”.
Existem patterns voltados para modelagem/desenho — design patterns, arquitetura de software — architectural patterns, integração — integration patterns. Embora não sejam específicos do paradigma orientado a objetos, os design patterns surgiram na área de software contemporâneos a esse paradigma e por isso muitas vezes são definidos usando conceitos de OO e mais facilmente aplicáveis em linguagens com suporte a OO.
Frameworks são arcabouços de construção de software. Ainda não encontrei grandes definições para frameworks, mas eu entendo framework como um modelo de trabalho predefinido para implementação de determinado aspecto de software. Um framework costuma englobar bibliotecas, componentes, APIs, estruturas, mecanismos e uma proposição (ou às vezes imposição) de forma de trabalho.
Enquanto patterns são modelos conceituais, frameworks são soluções práticas e específicas para determinada situação e tecnologia/linguagem. Freqüentemente um framework se baseia ou implementa um ou mais patterns aplicáveis àquela situação. Frameworks visam facilitar e acelerar o desenvolvimento de software.
[Texto originalmente postado na lista de discussão MGJUG-users, em 26/jul/2008.]
Livros sobre software patterns:
- Padrões de Projeto: Soluções Reutilizáveis de Software Orientado a Objetos [Design Patterns: Elements of Reusable OO Software]. Gang of Four (“GoF”): Gamma, Helm, Johnson, Vlissides. Bookman, Brasil, 2000, ISBN 85-7307-610-0. [Addison-Wesley, EUA, 1995].
- Patterns of Enterprise Application Architecture. Martin Fowler. Addison-Wesley, EUA, 2002. Web: Patterns in Enterprise Software – catálogos e aspectos.
- Pattern-Oriented Software Architecture (“POSA” 1 e 2). Buschmann, Meunier, Rohnert, Sommerlad, Stal. Wiley, EUA, 1996.
- Enterprise Integration Patterns. Hohpe, Woolf. A.-Wesley, EUA, 2004.
- Sun Java BluePrints Solutions Catalog e Core J2EE Patterns – bpcatalog.dev.java.net. Alur, Crupi, Malks. Prentice Hall, EUA, 2003.
Para saber mais:
- Arquitetura de Software – Padrões de Desenho/Projeto (Design Patterns) e de Arquitetura, referências por Márcio d’Ávila.
- Java Server Info – Java EE Patterns e Melhores Práticas, referências por Márcio d’Ávila.
- Livros sobre Engenharia e Arquitetura de Software – Padrões de Projeto/Desenho (Design Patterns), Arquitetura Orientada a Serviços (SOA) e Integração de Aplicações Corporativas (EAI); referências por Márcio d’Ávila.
- Design pattern (computer science) (em inglês), verbete em Wikipedia, a enciclopédia livre.
- Cuidado com a Orientação a Objetos e os Design Patterns, por Vitor Pamplona, 2007-05-21.
- 8 dicas para escolher um bom framework, por Vitor Pamplona, 2008-07-22.
- Jt – Java Pattern Oriented Framework, em TheServerSide.COM.