Pergunta

Qual é a melhor maneira de implementar DTOs?

O meu entendimento é que eles são uma maneira de transferir dados entre objetos. Por exemplo, em um aplicativo ASP.Net, você pode usar um DTO para enviar dados a partir do código-behind para o componente de camada de lógica de negócios.

E sobre outras opções, como apenas enviar os dados como parâmetros do método? (Isso seria mais fácil ASCES wher há menos dados para enviar?)

Que tal uma classe estática que apenas mantém os dados, que podem ser referenciados por outros objetos (uma espécie de classe de armazenamento de dados global asembly)? (Será que esta pausa encapsulamento demais?)

O que sobre um único DTO genérico usado para cada transferência? Pode ser um pouco mais problemas para o uso, mas reduz o número de classes necessárias para trabalhar com (reduz objeto desordem).

Obrigado por compartilhar seus pensamentos.

Foi útil?

Solução 6

Obrigado por todas as idéias úteis ...

Um resumo + minha opinião sobre isso:

- Se houver uma pequena quantidade de dados para mover e não muitos lugares para movê-lo, parâmetros regulares pode ser suficiente

-. Se houver uma grande quantidade de dados e / ou muitos objetos para movê-lo para um objeto especialmente criado pode ser mais fácil (objeto DTO)

- Um objeto de dados global que pode ser referenciada (em vez de passar) por vários objetos parece ser desaprovadas ... no entanto, eu me pergunto se não há, por vezes, um lugar para ele dentro de um sub-sistema particular ? É uma maneira de reduzir a quantidade de passagem de dados. Ele faz empurrar os limites do "bom encapsulamento", no entanto, em casos específicos dentro de camadas específicas, talvez pudesse adicionar simplicidade para um particluar assemply de classes. Assim se poderia perder encapsulamento em nível de classe, mas ainda poderia ter encapsulamento montagem de nível.

Outras dicas

Eu usei do DTO para:

  • Dados passar entre a interface do usuário e serviço níveis de de um aplicativo de 3 camadas padrão.
  • dados passar como parâmetros do método para encapsular uma grande número (5+) de parâmetros.

O 'um DTO para governá-los todos' abordagem poderia ficar confuso, melhor aposta é ir com específica DTO para cada grupo de recurso / recurso, tendo o cuidado de nomeá-los assim que eles são fáceis de combinar entre as características que eles estão usado em.

Eu nunca vi estática DTO na forma como você mencionou e hesitaria em criar singletons DTO como você descreve.

Eu mantê-lo simples e mapear uma classe DTO para uma tabela db. Eles são leves para que eu possa enviá-los em toda parte, incluindo sobre o fio.

Eu gostaria que poderia ser tão simples. Embora DTO originou devido a níveis de distribuição de rede de um sistema não pode haver carga inteira de questões se objetos de domínio são retornados para ver camadas. Aqui estão alguns deles:

1.By expondo objetos de domínio para modo de exibição camada, Visualizações tornar-se consciente da estrutura de objetos de domínio, que permite vista faz algumas suposições sobre como os objetos relacionados estão disponíveis. Por exemplo, se um objeto de domínio "Pessoa" foi retunrned a uma visão a que está "ligada" e em algum outro ponto de vista, "Endereço" da pessoa deve estar vinculada, haveria uma tendência para a camada de aplicação para usar uma semântica como person.getAddresse () que woukd falhar uma vez que nessa objeto de domínio ponto de Endereço pode não ter sido carregado no ponto. Em essência, com objetos de domínio tornar-se disponível para visualização camadas, vistas sempre pode fazer suposições sobre como os dados são disponibilizados.

2.) Quando os objetos de domínio são obrigados a vista (mais em clientes de espessura), haverá alwyas uma tendência para exibição lógica centrada a fluência dentro desses objetos tornando-os logicamente corrupto.

Basicamente a minha experiência eu vi que fazer objetos de domínio disponível para Visualizações criar problemas de arquitetura, mas há problemas com o uso do DTO também desde uso de DTO cria trabalho adicional em termos de criação de Montadoras (DTO para objetos de domínio e reverso) , a proliferação de objetos análogos como objeto de domínio paciente, feijão paciente DTO e talvez paciente obrigado a vista.

É evidente que não há respostas certas para isso especialmente em um sistema cliente de espessura.

I emprestado esta resposta breve e não completa, mas é verdade para DTO cliché de:
http://www.theserverside.com/discussions/thread.tss? thread_id = 32389 # 160505

Eu acho que é bastante comum o uso de DataSet / DataTable como "um DTO para governá-los todos". É fácil carregá-los a partir do banco de dados, e persistem os valores de volta, e eles podem ser facilmente serializados.

Eu definitivamente dizer que eles são mais problemas de usar. Eles fornecem todo o encanamento, mas a programação contra eles é uma dor (lotes de fundição, cheques nulos, cordas mágicas, etc). Seria interessante ver um bom conjunto de métodos de extensão para tornar o trabalho com eles um pouco mais "natural".

DTOs são usados ??para enviar dados sobre o fio, não entre objetos. Confira este post: POCO vs DTO

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