wirecardBrasil / moip-sdk-php

Cliente em PHP para integração server-side com APIs Moip v2
MIT License
124 stars 90 forks source link

Criar um objeto "Endereco" #57

Closed menezes- closed 6 years ago

menezes- commented 8 years ago

Atualmente se eu quero adicionar um endereço a um cliente eu preciso chamara função addAddress que recebe 7 parâmetros obrigatórios e 9 opcionais. Se eu quero utilizar um endereço setado no cliente eu tenho as opções getShippingAddress e getBillingAddress ambas retornam um stdClass (existe um bug no php doc da função getBillingAddress que indica que a função retorna uma string), ou seja, eu perco todas as facilidades de code completion da IDE e sou obrigado a lembrar o nome dos 9 campos que constituem um endereço. Acredito que seria muito mais fácil ter um objeto endereço (que existe na documentação oficial: http://dev.moip.com.br/referencia-api/?json#endereo) e mudar as interfaces para utilizar esse objeto. Outra grande vantagem é que isso dissociaria o endereço do cliente (o objeto de endereço pode vir a ser usado em outras circunstancias que não requerem um cliente).

Eu acho que seria interessante discutir fazer essa mudança para outros objetos, por exemplo: meios de pagamento1, lançamentos2 e etc.

Se houver interesse eu estou disposto a abrir uma pull request com as mudanças discutidas

menezes- commented 8 years ago

Outra coisa: a interface de endereço é inconsistente. Eu tenho a função addAddress que recebe uma const que indica se é do tipo billing ou shiping porém eu tenho duas funções getBillingAddress e getShippingAddress. Acho que ou a gente fica nos getters e setters (setBillingAddress e setShippingAddress) ou faz uma função do tipo getAddress($tipo) que recebe o mesmo const indicando qual endereço o programador quer.

Se não for ser adicionado mais nenhum tipo de endereço eu acredito que getters e setters seriam mais apropriados. Se, no futuro, outros tipos de endereço forem ser adicionados então uma interface addAddress e getAddress é mais apropriada. Alguém que trabalha diretamente com a API poderia dar uma iluminada nessa questão? ( @vagnerfiuza ??)

SOSTheBlack commented 8 years ago

@menezes- show de bola esse issue. Vou ver se consigo conversar com o @vagnerfiuza e com o @elisei em relação a isso para acertarmos o desenvolvimento.

menezes- commented 8 years ago

Alguma novidade relacionada a esse issue ?

bressani commented 6 years ago

@menezes- Olá! Tudo bem?

Sobre o primeiro comentário: Realmente ficaria bem legal do jeito que você disse... Se ainda tiver disponibilidade para contribuir com essas mudanças, seria de grande ajuda para nós 😃

Sobre o segundo: Não pretendemos adicionar mais endereços, então realmente os getters e setters dos endereços fariam bastante sentido.

Mil desculpas pela demora na resposta dessa issue... Estaremos acompanhando as issues com frequência. 😄

Abraços!

menezes- commented 6 years ago

@bressani
Cara, na época eu estava fazendo uma integração da API em um site e era meio "time sensitive" no fim eu acabei fazendo um fork, algumas correções (que, se não me engano, a maioria foi merged aqui no repositório oficial) e esse fork está sendo utilizado até hoje (inclusive nunca mais atualizei a biblioteca 😛). Enfim isso foi a bastante tempo atrás e hoje estou trabalhando em algo completamente diferente, estou meio sem tempo pra voltar a trabalhar nisso.

Agora se vocês estão pensando refatorar a API, eu recomendo muito darem uma olhada em como a API do PayPal funciona: https://github.com/paypal/PayPal-PHP-SDK (inclusive na época eu tinha planos de refazer a API do Moip usando o mesmo design, mas por questões de tempo eu mal comecei o projeto). Basicamente eles separam todos as partes em diferentes objetos com setters e getters apropriados, conversão pra JSON de cada um, etc. No fim acaba tornando a experiência muito prazerosa. Acredito que a API do Moip se beneficiaria bastante de um design assim, mesmo porquê a propria documentação da API defini uma série de objetos (por exemplo Endereco).

Abraços!