A componentização no âmbito de arquitetura e engenharia de software, pode ser descrita como, uma unidade de software, que pode ser plugada ou agrupada à outras unidades de software, assim, podendo ser reutilizado de inúmeras formas, dessa maneira, várias etapas na construção do software em questão podem ser dispensadas, tornando o processo de desenvolvimento mais produtivo.
As principais vantagens da sua utilização de componentes são:
- Reutilização - O componente em questão pode ser criado uma vez e reutilizado “N” vezes em vários softwares ou outros componentes
- Fácil evolução - O componente dever ter, um ciclo de vida, build/pipeline e versionamento independente do software principal, assim pode ser evoluído em paralelo de maneira mais simples, visto que unidades de softwares menores são mais fáceis de manter
- Qualidade - O componente em si, por ser uma unidade bem isolada e pequena e tende a possuir uma boa qualidade, tendo bom código e possuindo uma grande facilidade ao ser testado
Ao criar uma unidade de software, sempre deve ser considerado se a mesma, deve ser parte do software principal, ou um componente; Pense no seguinte cenário, existe uma aplicação, e ela e possui o requisito "enviar e-mail", se o código de infraestrutura (configuração smtp, configuração conteúdo html etc) do envio de e-mail for adicionado na própria aplicação, sera mais dificil testar o envio de e-mail em si, assim o código não terá uma boa qualidade, também será mais difícil de evoluir, e se surgir a necessidade de outra aplicação enviarem e-mail, esse código terá que ser copiado para essa nova aplicação ou refeito, por isso a criação de software baseada em componentes é tão importante.
A criação e utilização de um componente, deve seguir os seguintes princípios de coesão e acoplamento:
- REP - Reuse-release equivalence principle
- CRP - Common-reuse principle
- CCP - Common-closure principle
- ADP - Acyclic dependencies principle
- SDP - Stable-dependencies principle
- SAP - Stable-abstractions principle
Alguns desses princípios, podem ser quantificados e monitorados, com ferramentas como Sonar, Structure 101, Understand etc.