O Que é uma Plugin Architecture? Estender Sem Editar o Core
Uma plugin architecture permite adicionar funcionalidade através de módulos separados que o core carrega contra uma interface de extensão estável, sem modificar o core.
Uma plugin architecture mantém um core pequeno e estável e empurra funcionalidade opcional ou de terceiros para plugins que se conformam a uma interface definida. O core descobre e carrega esses plugins, muitas vezes em runtime. É como editores, sistemas de CI e navegadores são estendidos sem fork, e a interface estável de plugin se torna um contrato com implicações reais de CI.
Core mais pontos de extensão
O core define pontos de extensão, uma interface ou hook que um plugin implementa, e um mecanismo para descobrir e carregar plugins conformes. O core não sabe nada sobre plugins específicos; ele só conhece a interface que eles satisfazem.
Por que é útil
- Estender o comportamento sem tocar ou forkar o core.
- Terceiros constroem plugins de forma independente.
- Shipar um core enxuto e adicionar só os plugins que você precisa.
- Plugins podem ser desenvolvidos e lançados na própria cadência.
A interface de plugin é um contrato
A interface de extensão é um API contract entre o core e cada plugin. Mude-a sem cuidado e você quebra plugins que não controla. Então a mesma disciplina de backward-compatibility que se aplica a APIs públicas se aplica aqui.
Testando o matrix
Você precisa testar que o core funciona com os plugins e que os plugins funcionam entre versões do core. O CI muitas vezes roda um matrix de compatibilidade, versões-chave do core contra plugins-chave, para pegar quebras que nenhum dos lados vê buildando sozinho.
Pipelines de release independentes
Plugins tipicamente têm seus próprios repositórios e pipelines, desacoplados do core. Essa independência é o benefício, mas significa que o contrato precisa ser testado dos dois lados para que uma mudança no core não deixe silenciosamente o ecossistema de plugins encalhado.
Execuções de matrix em fleets escaláveis
Um matrix de compatibilidade core-por-plugin é um monte de jobs paralelos. Runners gerenciados que escalam horizontalmente (como o Latchkey faz) rodam essas combinações concorrentemente para que o matrix termine em tempo razoável.
Principais conclusões
- Uma plugin architecture estende um core estável através de módulos que satisfazem uma interface.
- A interface de extensão é um contrato que deve permanecer backward compatible.
- Testar o matrix de compatibilidade core-por-plugin é o principal fardo de CI.