none
Camadas + Objetos Complexos RRS feed

  • Pergunta

  • Boa tarde pessoal!

    Estou com um problema, tenho uma aplicação pronta, preciso acoplar em cima da camada de regra de negócio a exposição de alguns objetos complexos.

    Preciso enviar ao requisitante um objeto Usuario quando solicitado, mas quero deixar isto separado em camadas, a camada de negócio pode estar preparada para ser chamada por um serviço, marcado por exemplo com os DataContracts e DataMembers, mas o serviço em si quero deixar noutra camada, como posso fazer isso?



    []´s

    Diego Koga
    quarta-feira, 29 de julho de 2009 20:59

Respostas

  • Olá!!!

    Fred, minha aplicação tem uma camada de acesso a dados, uma camada de modelo e a de interface, agora necessito acoplar uma de serviço, como a do Martin Fowler que o Israel mencionou!

    Israel, já tinha visto este link e também sabia que não preciso decorar os objetos, mas existem algumas coisas que não são possíveis fazer se não estiverem decoradas.. Não sei ao certo quais são, outra coisa é que vou precisar validá-los, então eles tbem precisam estar decorados....


    A grande dúvida é como implementar esta camada, alguém pode me dar um exemplo complexo de WCF??? Os que encontrei agora na net são todos muito superficiais, então estou tentando fazer de N formas....

    A única solução que encontrei, foi replicar a estrutura do meu objeto na camada de serviço e fazer a conversão deste objetos para retornar pelo WCF... Procurando pelo codeproject.com achei uma arquitetura bem semelhante ao que fiz, mas achei horrível.... Depois que ví, achei que esta é a solução, uma vez que não consegui outras...

    Segue a arquitetura de exemplo: http://www.codeproject.com/KB/architecture/Sculpture-Part1.aspx



    []´s
    Diego Koga
    • Marcado como Resposta Koga, Diego segunda-feira, 17 de agosto de 2009 11:39
    quinta-feira, 30 de julho de 2009 17:21
    • Marcado como Resposta Koga, Diego segunda-feira, 17 de agosto de 2009 11:39
    quinta-feira, 30 de julho de 2009 18:45
    Moderador

Todas as Respostas

  • Olá Diego,

    Como está organizada sua solução atualmente ? Esses detalhes são muito importantes para que possamos colaborar.
    Fred Policarpo - MCT, MCTS [Win, WPF, WF] http://twitter.com/fredpolicarpo
    quinta-feira, 30 de julho de 2009 11:37
  • Boas Diego,

    Talvez a criação de uma Service Layer: http://martinfowler.com/eaaCatalog/serviceLayer.html ?

    A partir do WCF 3.5, você não precisa necessariamente decorar as classes que deseja expor com os atributos mencionados (http://www.israelaece.com/post/IgnoreDataMemberAttribute.aspx).
    http://www.israelaece.com
    quinta-feira, 30 de julho de 2009 13:04
    Moderador
  • Olá!!!

    Fred, minha aplicação tem uma camada de acesso a dados, uma camada de modelo e a de interface, agora necessito acoplar uma de serviço, como a do Martin Fowler que o Israel mencionou!

    Israel, já tinha visto este link e também sabia que não preciso decorar os objetos, mas existem algumas coisas que não são possíveis fazer se não estiverem decoradas.. Não sei ao certo quais são, outra coisa é que vou precisar validá-los, então eles tbem precisam estar decorados....


    A grande dúvida é como implementar esta camada, alguém pode me dar um exemplo complexo de WCF??? Os que encontrei agora na net são todos muito superficiais, então estou tentando fazer de N formas....

    A única solução que encontrei, foi replicar a estrutura do meu objeto na camada de serviço e fazer a conversão deste objetos para retornar pelo WCF... Procurando pelo codeproject.com achei uma arquitetura bem semelhante ao que fiz, mas achei horrível.... Depois que ví, achei que esta é a solução, uma vez que não consegui outras...

    Segue a arquitetura de exemplo: http://www.codeproject.com/KB/architecture/Sculpture-Part1.aspx



    []´s
    Diego Koga
    • Marcado como Resposta Koga, Diego segunda-feira, 17 de agosto de 2009 11:39
    quinta-feira, 30 de julho de 2009 17:21
  • Boas Diego,

    Eu já passei por uma situação parecida, e o que utilizamos aqui foi o Service Adapter Pattern, que é uma variação do padrão Adapter (GoF), que consiste em, basicamente, criar Data Contracts mais leves, contendo apenas o necessário para efetuar a comunicação com os clientes, servindo como uma espécie de tradutor entre esses contratos do serviço e o teu domínio.
    http://www.israelaece.com
    quinta-feira, 30 de julho de 2009 17:38
    Moderador
  • Israel, vc tem alguma literatura publicada sobre isso? E principalmente algum exemplo?


    vlw
    []´s
    Diego Koga
    quinta-feira, 30 de julho de 2009 18:09
    • Marcado como Resposta Koga, Diego segunda-feira, 17 de agosto de 2009 11:39
    quinta-feira, 30 de julho de 2009 18:45
    Moderador
  • Israel, este exemplo que postei do codeproject.com não é algo parecido com o service adapter pattern? Se não for exatamente ele msm...


    Vlw!
    Diego Koga
    quinta-feira, 30 de julho de 2009 18:46
  • Boas Diego,

    Acredito que sim. Com essa ferramente você tem todo um suporte visual para tornar esse trabalho mais produtivo.

    Se quiser optar por qualquer tipo de tradução, ela terá que ser feita de alguma forma. Uma das coisas interessantes é que nem sempre o teu modelo de dominio será exposto 100% para os clientes; geralmente, pelo menos em alguns casos que trabalho/conheço, essa layer faz um "refinamento", ou seja, nem todas as propriedades expostas pelos teus objetos de domínio são propagados para o cliente.

    De qualquer forma, uma outra alternativa é utilizar o WSSF, que utiliza o principio de EntityTranslator para efetuar o mapeamento: http://rajaramtechtalk.wordpress.com/how-to-create-a-service-using-web-service-software-factory-wssf/ (item 9).
    http://www.israelaece.com
    quinta-feira, 30 de julho de 2009 19:06
    Moderador