Valeu demais pelo feedback, e ótimo que você levantou esses dois pontos — eles realmente ficaram como brechas no artigo.
- Sobre logs:
Uma boa abordagem é usar Domain Events.
Você levanta o evento dentro da entidade ou aggregate (PaymentApproved, CustomerCreated, etc.) e depois trata isso num listener desacoplado que pode fazer o log, mandar alerta, ou qualquer outro efeito colateral.
A vantagem é que o domínio continua limpo — sem saber que existe ILogger — e você ainda ganha observabilidade.
Tô considerando escrever um artigo só sobre Domain Events, e esse tópico com certeza entra lá.
- Sobre exceções no domínio:
Esse é outro papo bom.
A minha visão: exceção é pra erro inesperado, não pra fluxo alternativo.
Se um pagamento não pode ser aprovado por causa de uma regra de negócio, o ideal é retornar um Result ou algo semelhante.
Isso deixa o código mais funcional, mais testável e evita dependência do try/catch como mecanismo de controle de fluxo.
Tem várias libs que ajudam nisso: OneOf, LanguageExt, FluentResults, entre outras. Mas mesmo sem lib, um Result simples já resolve bem.
Valeu pelo comentário e por puxar esses temas — são os próximos tópicos naturais da série.
Um abraço! 👊🏼