Como é desenvolver em Salesforce?
Após 6 meses de convivência diária com este ecossistema de desenvolvimento, aprendendo muito, botando a mão na massa, esquentando a cabeça… resolvi escrever minha percepção de como tudo isso funciona.
Salesforce funciona literalmente TUDO na nuvem, inclusive o desenvolvimento. Aqui começa a quebra de paradigmas para quem já estava acostumado com desenvolvimento "tradicional". Este ambiente inovador rola no Salesforce Platform.
É um conjunto de tecnologias que viabiliza e serve de base para o desenvolvimento de outras tecnologias. A plataforma dá suporte não somente às nuvens do Salesforce, mas também a recursos personalizados criados por clientes e parceiros. Esses recursos vão de simples layouts de página a aplicativos completos. A Salesforce adota uma abordagem API First para criar recursos na Salesforce Platform. Tudo é baseado em API.
Existem vários meios de escrever código para Salesforce. Uma das opções é escrever numa console de desenvolvimento que funciona diretamente no navegador. Ou seja, sem qualquer tipo de IDE (Integrated Development Environment ou Ambiente de Desenvolvimento Integrado) e de qualquer lugar, você pode escrever códigos diretamente na Salesforce Platform.
Outra forma é utilizando uma IDE. Normalmente utilizamos o Visual Studio Code. Existem diversos plugins para auxiliar no processo de desenvolvimento como em outras linguagens.
Atualmente a maioria das equipes de desenvolvimento utiliza o Salesforce Developer Experience, ou simplesmente: SFDX. O esquema acima demontra basicamente o fluxo de desenvolvimento. Cada desenvolvedor cria um projeto base em sua máquina local, conecta o projeto em uma Scratch Org (onde ficam os códigos que serão sincronizados) e faz um retrive (equivalente ao pull do Git) no projeto inicial.
Com este código local você pode acessar todos os arquivos da Org Dev. Cria classes, componentes, triggers, batchs, etc. Em outra oportunidade pretendo falar um pouco sobre cada um deles, mas para não ficar descontextualizado: em Salesforce também temos backend (apex, trigger, batch) e frontend (lightning web components, aura, visual force).
Enquanto seu código estiver local, acontecem validações dos próprios plugins da IDE em relação à escrita do código, porém uma das grandes diferenças para outros meios de desenvolvimento é quando se faz o deploy (equivalente ao push no Git) deste código para a Org Dev. Antes de persistir as alterações ou novas classes na Org Dev a plataforma faz um validação mais completa deste código. Não apenas a escrita, mas uma série de validações de chamada de objetos, construtores, métodos, consultas SOQL, variáveis, etc. Caso encontre qualquer problema não ocorrerá a persistência destas alterações/inclusões. Você pode fazer isto manualmente (eu prefiro) ou de forma automática (utilizando o Deploy On Save no VSC).
Paralelamente mantemos um repositório Git dos códigos, seja remoto ou local. Depende muito de cada projeto. Acho fantástico esta forma de desenvolvimento. Muitos erros de escrita e lógica são mitigados antes mesmo de cair no ambiente de execução, gerando assim mais qualidade no desenvolvimento.
OK! Fiz minha classe, lógica está certinha, subiu para o ambiente de Dev. Fechou. E agora? Agora é hora de fazer classe de teste. Sim! É obrigatório. Nenhuma classe "sobe" de ambiente sem ter sua classe de teste com no mínimo 75% de cobertura. Mais qualidade aplicada no processo…
Depois o fluxo segue... Inicia-se a criação de pacotes das alterações do projeto para "subir" para outros ambientes através de esteiras de integração contínua. A CI (Continuous Integration) é uma prática utilizada em desenvolvimento de software na qual de forma automática compila e testa o software toda vez que um desenvolvedor envia código para a aplicação. Basicamente seguimos o fluxo de subida assim: DEV (Developer) -> UAT (User Acceptance Testing) -> Production (Ambiente Real).
Já escutei inúmeras vezes que Salesforce te força a programar de forma eficiente e correta. Concordo! Além de todas essas validações, testes, compilações, ainda temos as limitações de uso de recursos na plataforma. Programou sem pensar em performance? Usou "SELECT *" (nem funciona na real haha)?… Vai cair nas limitações!
Curtiu? Quer aprender mais sobre? Recomendo fazer esta trilha de Desenvolvimento Iniciante no Trailhead: https://trailhead.salesforce.com/pt-BR/content/learn/trails/force_com_dev_beginner. É free. Aproveite.