Skip to content

Instantly share code, notes, and snippets.

@reginadiana
Last active June 25, 2024 10:38
Show Gist options
  • Save reginadiana/331e3c0e9d688d45d40e0c2366803f60 to your computer and use it in GitHub Desktop.
Save reginadiana/331e3c0e9d688d45d40e0c2366803f60 to your computer and use it in GitHub Desktop.
Clean Code e Clean Architecture

Refactoring e Code Smells

Remover condiçoes alinhadas por cláusulas guardadas. Dado o seguinte código para enviar um email, temos muitas condiçoes alinhadas:

async function sendEmailCampaign(campaign) {
  if (!campaign.sent) {
    const recipients = await repository.getRecipients(campaign.id);
    if (hasEmailQuota(recipients.length)) {
      for (const recipient of recipients) {
        if (lisBouncedRecipient(recipient)) {
          if (isAllowedRecipient(recipient)) {
            await send(campaign, recipient);
          }
        }
      }
    }
  }
}

Para melhorar a legibilidade podemos usar cláusulas guardadas. A ideia é que paremos/demos um break o quanto antes no código:

async function sendEmailCampaign(campaign) {
  if (campaign.sent) return;

  const recipients = await repository.getRecipients(campaign.id);
  if (!hasEmailQuota(recipients.length)) return;

  for (const recipient of recipients) {
    if (!lisBouncedRecipient(recipient)) continue;

    if (isAllowedRecipient(recipient)) {
      await send(campaign, recipient);
    }
  }
}

Arquitetura Hexagonal explica que é importante separar em termos de design, as camadas:

  • resource acesso a dados
  • application regras de negocio
  • drive API/service
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment