# O que é o padrão Strangler Fig Application?

O padrão de projeto *Strangler Fig Application*, que também é conhecido como padrão *Strangler Application* ou simplesmente *Strangler*, teve seu nome baseado em uma analogia popularizada por [Martin Fowler](https://martinfowler.com/).

Ao meu ver, as analogias compõem um recurso poderosíssimo para facilitar o entendimento de assuntos complexos. Por meio de comparações, elas permitem [explicar conceitos desconhecidos por meio daqueles que já conhecemos](https://descomplica.com.br/blog/o-que-e-analogia/)... Isso, é claro, se tivermos primeiramente uma referência com a qual comparar.

Dito isso, eu te faço uma pergunta: você sabe o que são ***Strangler Figs*?** Se, assim como eu, você nunca tinha ouvido falar sobre esse termo até se deparar com o padrão abordado neste artigo, continue lendo, pois vamos começar pelas "raízes" para entender o seu significado e qual a sua relação com desenvolvimento de software.

## O que são Strangler Figs?

Em uma publicação feita em seu próprio site, Fowler relata que concebeu uma [metáfora sobre a migração de sistemas críticos](https://martinfowler.com/bliki/StranglerFigApplication.html) durante uma viagem que fez para a Austrália, após observar o comportamento de certas árvores que podiam ser encontradas naturalmente por lá.

Essas árvores, que na verdade fazem parte de uma família com várias outras espécies, são denominadas [*Strangler Figs*](https://en.wikipedia.org/wiki/Strangler_fig) ou "figueiras estranguladoras", em português, e recebem esse nome devido à forma pela qual normalmente se desenvolvem: elas crescem ao redor de árvores hospedeiras e as "estrangulam".

Para ser mais específico, elas produzem frutos cujas sementes são depositadas nas copas das outras árvores principalmente como resultado da alimentação de pássaros, e quando essas sementes encontram os recursos necessários, elas germinam e suas raízes passam a crescer do alto até se estabelecerem no solo.

O resultado desse processo pode ser, [ocasionalmente, a morte da árvore hospedeira](https://www.naplesgarden.org/strangler-figs-not-always-a-bad-wrap/), visto que a figueira passa a competir tanto pelos nutrientes do solo quanto pela luz solar, nas partes superiores. Você pode ver como esse tipo de árvore se parece assistindo [este vídeo](https://www.youtube.com/watch?v=kVpVbS9CJIk) (YouTube).

<details data-node-type="hn-details-summary"><summary>Strangler Fig Application vs. Strangler Application</summary><div data-type="detailsContent">Originalmente, em 2004, o artigo de Fowler tinha <em>"Strangler Application"</em> como título. O termo <em>strangler</em> ou "estrangulador" não é, por si só, muito claro sobre a origem da analogia, e muitas vezes era usado no sentido violento. Por isso, o autor renomeou sua publicação sobre o padrão para "Strangler Fig Pattern", reforçando a relação com a metáfora original.</div></details>

## Desenvolvendo software como Strangler Figs

Agora que conhecemos o contexto por trás da analogia de Fowler, finalmente podemos prosseguir para a etapa em que a relacionamos com o contexto de desenvolvimento de software e microsserviços.

A comparação é feita com a migração de uma aplicação monolítica para uma organizada em microsserviços, e pode ser explicada da seguinte forma:

1. a aplicação monolítica, pronta e já em funcionamento, serve como uma árvore hospedeira, em torno da qual a nova aplicação organizada em microsserviços será desenvolvida;
    
2. aos poucos, desenvolvemos microsserviços "ao redor" da aplicação monolítica (pense neles como as raízes de um *Strangler Fig*) para substituir responsabilidades individuais e bem definidas do sistema original;
    
3. eventualmente — esse processo pode durar anos — o ecossistema de microsserviços desenvolvidos em torno do sistema original terá crescido o suficiente para substitui-lo por completo, sendo assim, ele é "estrangulado".
    

A principal vantagem de aplicar *Strangler Fig Applications* decorre da entrega gradual de *software*, que reduz o risco durante o desenvolvimento. Ao trabalharmos com incrementos, em vez de substituir "tudo de uma vez", não apenas podemos aproveitar cada microsserviço assim que estiver pronto, como também conseguimos acompanhar mais facilmente a evolução da aplicação e verificar se ela está no caminho certo.

## Conclusão

O padrão de projeto *Strangler Fig Application* é comumente lembrado quando se fala na migração de uma aplicação monolítica para a arquitetura de microsserviços, e recomenda que o desenvolvimento e implantação de microsserviços sejam graduais, até o momento em que todo o sistema original possa ser substituído por eles.

O nome dessa abordagem se origina de uma analogia feita por Martin Fowler com o comportamento de uma família de árvores denominadas *Strangler Figs*, cujas raízes crescem ao redor de árvores hospedeiras e as "estrangulam", de modo a "roubar" os seus nutrientes, em alguns casos, até mesmo causando a morte da árvore original.

Ao implantar microsserviços que substituem responsabilidades pequenas e bem definidas do domínio, as migrações feitas seguindo esse padrão permitem entregar valor ao negócio de forma incremental, e reduzem os riscos dentro do projeto, devido à maior facilidade de monitorar o seu andamento.

## Referências

1. [martinfowler.com](https://martinfowler.com/)
    
2. [Analogia: o que é, conceito e exemplos (](https://descomplica.com.br/blog/o-que-e-analogia/)[descomplica.com.br](http://descomplica.com.br)[)](https://descomplica.com.br/blog/o-que-e-analogia/)
    
3. [StranglerFigApplication (](https://martinfowler.com/bliki/StranglerFigApplication.html)[martinfowler.com](http://martinfowler.com)[)](https://martinfowler.com/bliki/StranglerFigApplication.html)
    
4. [Strangler fig - Wikipedia (wikipedia.org)](https://en.wikipedia.org/wiki/Strangler_fig)
    
5. [Strangler Figs: Not Always a Bad Wrap | Naples Botanical Garden (](https://www.naplesgarden.org/strangler-figs-not-always-a-bad-wrap/)[naplesgarden.org](http://naplesgarden.org)[)](https://www.naplesgarden.org/strangler-figs-not-always-a-bad-wrap/)
    
6. [Strangler Fig - YouTube (youtube.com)](https://www.youtube.com/watch?v=kVpVbS9CJIk)
    
7. [Break the monolith: Chunking strategy and the Strangler pattern - IBM Garage Practices (www.ibm.com)](https://www.ibm.com/garage/method/practices/code/chunking-strategy-strangler-pattern/)
    
8. [Apply the Strangler Fig Application pattern to microservices applications - IBM Developer (developer.ibm.com)](https://developer.ibm.com/articles/cl-strangler-application-pattern-microservices-apps-trs/)
    

## Atribuições

* Fotografia da capa por [David Clode](https://unsplash.com/@davidclode) em [**Unsplash**](https://unsplash.com/)
