Aqui na empresa, utilizamos o delphi para desenvolver nosso principal produto, um ERP, no entanto, neste ano fizemos uma análise do futuro do mercado de software e temos visto que o visual studio tem agregado uma série de tecnologias até então indisponíveis no delphi, e que, com exceção do Brasil e Russia, o delphi tem perdido força no mundo inteiro, fazendo com que em agumas regiões já não se encontre mão de obra especializada.
Por isso vamos desenvolver a solução para NFCe em visual studio e C#.
Quando decidimos isto, fizemos uma pesquisa por bibliotecas que já estivessem prontas para tal, e analisamos a UniNfe da Unimake Software, o ACBRNFeMonitor e o projeto Open NFe.
No caso da UniNfe, vimos que ela implementa o consumo dos webservices para NF-e, NFC-e, CT-e, MDF-e e NFS-e e faz a Integração ao ERP via arquivos, mas infelizmente não gera o XML e não possui classes para tal. Outro ponto negativo é o fato de ter que persistir arquivos em disco para poder consumir os serviços, o que diminui a eficiência.
O ACBRNFeMonitor possui integração via troca de arquivos, como no caso da UniNfe, e via telnet, mas o retorno de alguns serviços deixa a desejar pelo fato de devolver uma resposta em formato diferente dos manuais para aquele serviço. Outro fator é a integração com o C#.
Por último o OpenNFe tem um acoplamento forte com o Sql Server, e ainda a forma como foram implementadas as classes não facilita o uso. Basicamente o autor pegou os schemas e importou-os no c#, sem muito tratamento.
No meu caso, estou tendo o cuidado de escrever as classes seguindo rigorosamente os manuais disponíveis, inclusive quanto a forma como os serviços são consumidos. Até mesmo os comentários para cada campo disponíveis nos manuais foram adicionados em cada campo de cada classe.
Uma coisa que percebi analisando o código do componente do ACBR para NFe é que por conta das limitações do Delphi, o estilo de programação utilizado apresenta risco considerável e dificuldade de manutenibilidade do código. Por exemplo, existe muita, mas muita magic string no código, enquanto no C# o tratamento de XML é nativo via serialização.
Em breve postarei mais informações sobre a biblioteca, saudações.