Skip to content
Latchkey

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.

Guias relacionados