Pergunta

Estou curioso para saber o que a comunidade sente sobre esse assunto. Recentemente, entrei em questão com um cenário de Nibernate/WCF (entidades persistiu na camada de serviço) e percebi que posso estar seguindo a direção errada aqui.

Minha pergunta é claramente, ao usar um gráfico de objeto persistente (Nibernate, LINQ para SQL, etc) atrás de um serviço da Web (WCF nesse cenário), você prefere enviar essas entidades sobre o fio? Ou você criaria um conjunto de DTO mais leves (sem referências cíclicas)?

Foi útil?

Solução

Dtos. Use o AutomApper para mapeamento de objeto para objeto

Outras dicas

Já estive nesse cenário várias vezes antes e posso falar da experiência de ambos os lados. Originalmente, eu estava apenas serializando minhas entidades e enviando -as como está. Isso funcionou bem do ponto de vista funcional, mas quanto mais eu examinava, mais percebia que estava enviando mais dados do que precisava e estava perdendo a capacidade de variar a implementação de ambos os lados. Nos aplicativos de serviço subsequentes, tomei para criar DTOs cujo único objetivo é obter dados para e para o serviço da Web.

Fora de qualquer interoperidade, ter que pensar em todos os campos que estão sendo enviados sobre o fio é muito útil (para mim) para garantir que não esteja enviando dados que não sejam necessários ou piores, não devem ir ao cliente .

Como outros mencionaram, Automapper é uma ótima ferramenta para a entidade para o mapeamento DTO.

Quase sempre criei DTOs para transferir o fio e usar entidades Richter no meu servidor e cliente. No cliente, eles terão uma lógica de apresentação comum enquanto estiver no servidor, eles terão lógica de negócios. O mapeamento entre os DTOs e as entidades pode ser burro, mas precisa acontecer. Ferramentas como o AutomApper ajudam você.

Se você está perguntando, envio entidades serializadas de um serviço da web para o mundo exterior? Então a resposta é definitivamente não, você obterá uma interoperabilidade mínima se fizer isso. Os DTOs ajudam a resolver esse problema, definindo um conjunto de 'objetos' que podem ser instanciados em qualquer idioma, esteja você usando C#, Java, JavaScript ou qualquer outra coisa.

Sempre tive problemas para enviar objetos Nibernate sobre o fio. Particularmente se você estiver usando um modelo ActiveRecord. e/ou se seu objeto tiver laços com a sessão (eco). Outro resultado desagradável é que o Nibernate pode tentar carregar o objeto na entrada do método (antes que você possa obtê -lo), o que também pode causar problemas.

Então ... recebendo a mensagem aqui? Problemas, problemas de problemas ... DTO é o tempo todo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top