Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- >Não tem como dizer qual seria a "melhor forma" de fazer isso, daria uma margem enorme para opinião, então tentarei expressar os prós e contras de cada forma.
- Antes de olhar para isso você deve ver se irá ou não compartilhar os tipos entre o servidor e os clientes. Existem alguns fatores que podem influenciar nessa decisão, como versionamento, erros de tipos (quebrando o cliente assim), duplicação de código, possíveis erros ao manter os dados entre o cliente e o servidor, etc. Esses fatores podem influenciar se você irá ou não compartilhar os tipos de dados.
- Se resolveu por compartilhar, você teria as duas opções que mostrou, duplicar o código ou realizar o versionamento por dll's/pacotes.
- <h3>Duplicar Código</h3>
- **Prós:**
- - Utilizando essa forma você está garantindo que a tipagem será a mesma
- entre as aplicações, não causando assim problemas de tipagem;
- - Não terá problemas com serialização/descerialização pois os tipos serão os mesmos;
- **Contras:**
- - Duplicação de código;
- - Possível erro de tipos que causará em problemas da aplicação;
- - Maior trabalho para manter os códigos atualizados;
- <h3>Pacote NuGet</h3>
- Você tem a mesma estrutura que se fosse duplicar o código, porém possui a facilidade de versionamento, deixando assim menos propenso a erros, garantindo uma "segurança" para a comunicação entre as aplicações.
- Por exemplo, se você tem a versão 1.5.6 no cliente e no servidor possuir a 1.6 possivelmente terá alguns problemas. Com o versionamento você sabe o que mudou e se ocasionou problemas, sabe como corrigir.
- Agora, se você não optar por compartilhar os tipos, você terá um cenário diferente.
- <h3>Dynamic Types</h3>
- Utilizando esta forma você não estaria compartilhando os tipos entre o cliente e o servidor, isto é, explicitamente. Uma possível modificação no servidor não iria "quebrar" o cliente, e vice-versa.
- **Prós:**
- - Modelo do cliente está menos ligado com o servidor, espelhando apenas a saída, mas não os tipos;
- - O Servidor pode ser modificado sem risco para os clientes;
- - Permite melhorias em qualquer lado (cliente-server) sem "quebrar" a aplicação.
- - Não se preocupa com os tipos;
- **Contras:**
- - Você não possui um contrato entre o cliente e o servidor;
- - Não se sabe quando possui alguma mudança significativa que poderá ocasionar problemas;
- - Cliente e Servidor com versões diferentes é mais complexo achar um erro que que eventualmente poderia acontecer;
- - Não se preocupa com os tipos;
- Observe que não se preocupar com os tipos está em prós em contras. A forma que você for tratar os dados que decidirá se será pró ou contra.
- **Conclusão**
- Utilizando tipagem definida entre os sistemas garantirá um acoplamento maior, deixando assim mais "segurança", se é que essa seja a palavra. Porém, poderá ter problemas caso tenha algum tipo diferente entre as aplicações. Já sem a tipagem definida você terá "problemas" de versionamento e tipagem fraca. Não tem como dar certeza que terá esses problemas, e sim que são possíveis problemas que poderão aparecer no decorrer do projeto.
- Não existe uma forma "melhor" de fazer isso. Não sabemos do seu projeto nem como isso seria aplicado no cenário de sua aplicação.
- ----------
- Existe algumas bibliotecas que ~prometem~ aceitar os dois tipos, a [Expando][1] é uma delas. [Neste link][2] você possui um tutorial caso queira verificar o seu funcionamento.
- **Nota:** Independente das opções você está compartilhando os tipos, a diferença é que uma está explicito e a outra não.
- Referências:
- - [Usando Nuget para dar Web API que Adicionar serviço experiência de Referência][3];
- - [Devo compartilhar tipos entre um serviço Web API e seu cliente][4];
- - [WebPack][5]
- - [Json.NET][6]
- <sub>
- *EU possuo uma certa queda por versionar em pacotes para maior controle entre os sistemas. Dessa forma saberei exatamente o que mudou e onde foi alterado. Caso aconteça algum problema, saberei onde corrigir.*
- </sub>
- [1]: https://github.com/RickStrahl/Expando
- [2]: http://weblog.west-wind.com/posts/2012/Feb/08/Creating-a-dynamic-extensible-C-Expando-Object
- [3]: http://www.bizcoder.com/using-nuget-to-give-web-api-that-add-service-reference-experience
- [4]: http://stackoverflow.com/a/22050502/4843158
- [5]: http://www.bizcoder.com/webpack
- [6]: http://www.newtonsoft.com/json/help/html/SerializationGuide.htm#Dynamic
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement