Cara, o artigo está sensacional, parabéns. Eu só achei o exemplo meio confuso, principalmente na parte de gateways. Talvez pra quem nunca tenha lidado com pagamentos fique mais simples.
Eu vejo a forma de pagamento como um factory de PaymentMethod e o gateway como um SDK/uma infraestrutura independente disso, sendo que no exemplo a forma de pagamento tá vindo do Gateway, daí a confusão. Mas entendi a mensagem sobre Factory, talvez fosse uma boa dar uma reorganizada nisso se concordar.
Outra sugestão: acho que fica melhor escrever os blocos de cada classe de forma separada, fica mais fácil de ler onde cada classe termina. Mas entendo que deixar tudo junto facilita para rodar em outro lugar (copiando tudo de uma vez só).
Se for a intenção, convém construir cada trecho separadamente e mostrar o código final... no fim, hehe. Assim dá pra acompanhar a construção de cada coisa.
Assim você pode focar em mostrar só os arquivos alterados em cada evolução.
Tá aí o super feedback e continua jogando duro, seus conhecimentos estão ajudando outros devs a começar a desenvolver do jeito certo.