Faca de dois gumes

Com a chegada do Entity Framework e do LinqToSql chegam com eles algumas dúvidas arquiteturais interessantes. A que tenho mais discutido é a seguinte: como faço para enviar num WebService meus objetos de negócio?

Primeiro, a boa notícia: tanto o LinqToSQL quanto o Entity Framework oferecem facilidades de serialização. O link http://msdn.microsoft.com/en-us/library/bb546184.aspx  mostra como isto funciona no LinqToSQL. O link http://msdn.microsoft.com/en-us/library/bb896304.aspx fala da serialização no Entity Framework. Isto torna simples disponibilizar objetos através de serviços WCF. Bom, não é?

Você deve estar esperando uma má notícia, certo? Bem, não tenho uma, mas sim um conselho: minha vivência diz que contratos de dados para serviços têm função e tempo de manutenção diferente dos dados de um banco de dados. Amarrar o esquema do banco com esquema de contratos de serviços é uma faca de dois gumes: por um lado, é simples; por outro, pode levar a um excesso de manutenção, uma vez que seus objetos estarão sujeitos a duas fontes de mudanças - contratos de serviço e modelo lógico/físico.

Esta dor pode ser amenizada com o uso do Entity Framework, já que ele possui uma camada de mapeamento entre conceitual e físico, e o nível conceitual costuma estar perto do que queremos passar em contratos de serviço.

Para projetos maiores, tendo a preferir definir duas classes de objetos – classes que definem os contratos e classes para mapear as entidades de negócio. O esforço pode parecer duplicado, mas, se eu estiver certo, poderá ter menor custo de manutenção, e manutenção costuma custar cerca de 70% do custo de um software.

E você o que acha?