Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Conflito com a interface PagarmeApiSDK.Standard.IConfiguration #49

Open
brunobritodev opened this issue May 21, 2023 · 3 comments
Open

Comments

@brunobritodev
Copy link

Ao desenvolver uma classe que utiliza o PagarmeApiSDKClient, adicionei a referência ao IConfiguration com o intuito de acessar as informações de usuário e senha presentes no appsettings.json. No entanto, para minha surpresa, percebi que, devido ao using PagarmeApiSDK;, há uma outra Interface também chamada IConfiguration do componente da PagarMe. Essa duplicidade gera um conflito com o IConfiguration presente no namespace Microsoft.Extensions.Configuration.

Não seria mais apropriado posicionar o IConfiguration em um namespace diferente? ou, talvez renomeá-lo para evitar conflitos com as classes do framework? Uma terceira opção poderia ser, caso o IConfiguration do PagarmeApiSDK não seja essencial para uso pelos clientes finais (como no meu caso), alterar seu modificador de acesso para "internal". Dessa forma, sua exposição desnecessária seria evitada.

É possível contornar a situação ao especificar o namespace completo, no entanto creio que seria mais conveniente se um componente fosse projetado para ser menos intrusivo e evitar potenciais conflitos com classes do framework.

image

@lucas-fsousa
Copy link

Você pode usar um Alias para algum dos namespaces, assim o conflito vai sumir.

O IConfiguration da MS vem do namespace Microsoft.Extensions.Configuration, você pode fazer o seguinte.

Coloque no inicio da sua classe o seguitne código:

using Conf = Microsoft.Extensions.Configuration.IConfiguration;

Assin, você pode usar o Conf para acessar o appsettings.json e obter todos os dados que você precisar de lá. O outro IConfiguration do SDK PAGARME você pode deixar do jeito que está, ou inverter e usar o que eu te passei acima no namespace do SDK.

Espero ter ajudado.

@brunobritodev
Copy link
Author

Agradeço pela resposta e pela sugestão de usar um alias para contornar o conflito de nomes.

No entanto, acredito que o problema é um design que pode ser melhorado. O uso de nomes que conflitam com tipos bem conhecidos da frameworks pode levar a erros e confusões. Em projetos maiores e equipes com vários desenvolvedores, esse workaround pode não ser ideal e pode resultar em um código mais difícil de entender e manter.

Boas práticas de design prevê um bom Encapsulamento, resultando em um component menos intrusivo. Portanto, minha sugestão permanece: seria mais apropriado posicionar o IConfiguration em um namespace diferente ou renomeá-lo para evitar conflitos.

E nesse caso a interface nem é essencial para o uso básico, uma boa opção seria torná-la "internal".

Isso não só tornaria a SDK mais fácil de usar, mas também mais robusta e menos propensa a causar problemas em projetos que a integram.

Acredito que a issue já atendeu seu objetivo que é sugerir uma mudança e os pontos já foram dados. Fique a vontade para fecha-la.

@lucas-fsousa
Copy link

de fato o seu ponto é totalmente válido. Também achei meio desnecessária a exposição do IConfiguration, mas vai saber como os caras desenharam a aplicação como um todo, as vezes sequer veio a mente que existia o IConfiguration da MS. Bom, veremos o que vão fazer a respeito. Sou apenas um mero contribuinte da comunidade que também sofreu com esse problema que você expos.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants