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:

Para saber mais: