Pergunta

Cenário típico.Usamos XML Web Services tradicionais internally para comunicação entre um farm de servidores e vários servidores distribuídos e clientes locais.Não há terceiros envolvidos, apenas nossos aplicativos usados ​​por nós e por nossos clientes.

No momento, estamos pensando em mudar de XML WS para um WCF/object-based modelo e têm experimentado várias abordagens.Um deles envolve a transferência de objetos/agregados de domínio diretamente pela rede, possivelmente invocando atributos DataContract neles.

Usando IExtensibleDataObject e um DataContract usando a propriedade Order no DataMembers, deveremos ser capazes de lidar com problemas simples de controle de versão de propriedade (lembre-se, controlamos todos os clientes e podemos facilmente forçá-los a atualizá-los).

Sempre ouço que devemos usar objetos de transferência de dados dedicados e somente para transferência (DTOs) sobre o fio.

Por que?Ainda existe uma razão para fazer isso?Usamos o mesmo modelo de domínio no lado do servidor e no lado do cliente, é claro, preenchendo previamente coleções, etc.Somente quando considerado direito e "necessário". As propriedades de coleta utilizam o princípio do localizador de serviço e o COI para invocar um NHibernate-based "serviço" para buscar dados diretamente (no lado do servidor) e um WCF cliente de "serviço" no lado do cliente para falar com o WCF fazenda de servidores.

Então - por que precisamos usar DTOs?

Foi útil?

Solução

Na minha experiência, os DTOs são mais úteis para:

  1. Definir estritamente o que será enviado pela rede e ter um tipo especificamente dedicado a essa definição.
  2. Isolando o restante do seu aplicativo, cliente e servidor, de alterações futuras.
  3. Interoperabilidade com sistemas não .Net.Os DTOs certamente não são um requisito, mas facilitam o design de tipos "seguros".

No seu cenário, esses recursos de design podem não importar muito.Usei o WCF com DTOs estritos e objetos de domínio compartilhados e em ambos os cenários funcionou muito bem.A única coisa que notei ao enviar objetos de domínio pela rede foi que eu tendia a enviar mais dados (e de maneiras inesperadas) do que precisava.Provavelmente isso se deveu mais à minha falta de experiência com o WCF do que a qualquer outra coisa;mas é algo com o qual você definitivamente deve ter cuidado, caso opte por seguir esse caminho.

Outras dicas

Tendo trabalhado com ambas as abordagens (objetos de domínio compartilhado e DTOs), eu diria que o grande problema com objetos de domínio compartilhado é quando você não controla todos os clientes, mas pelas minhas experiências anteriores, eu normalmente usaria DTOs, a menos que a velocidade de desenvolvimento fosse de a essência.

Se houver alguma chance de você nem sempre estar no controle dos clientes, eu definitivamente recomendaria DTOs, porque assim que você compartilha seus objetos de domínio com o aplicativo cliente de outra pessoa, você começa a vincular seus componentes internos ao ciclo de desenvolvimento de outra pessoa.

Também achei os DTOs úteis ao trabalhar em um ambiente de serviço versionado, o que nos permitiu mudar radicalmente a parte interna do nosso aplicativo, mas ainda aceitar chamadas para as versões antigas de nossas interfaces de serviço.

Por fim, se você tiver muitos aplicativos cliente, também poderá ser benéfico usar DTOs, pois você estará protegido com um serviço facilmente controlável.

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