blog Arquitetura de Soluções

por Waldemir Cambiucci

Construindo soluções com Entity Framework e arquitetura em múltiplas camadas.

Construindo soluções com Entity Framework e arquitetura em múltiplas camadas.

  • Comments 4

Olá pessoal, tudo certo?

Esse assunto tem sido recorrente desde julho, retornando em algumas discussões com empresas de diversas áreas: Como organizar uma arquitetura de solução usando Entity Framework? Como representar as entidades de negócio, as interfaces de serviços e como passar esses dados entre as várias camadas de uma aplicação?

Para começar, tenho recomendado olhar a parte IV do AppArchGuide 2.0, que anunciamos semana passada, aqui:

patterns & practices : Application Architecture Guide 2.0
Ref.: http://blogs.msdn.com/wcamb/archive/2008/12/19/patterns-practices-application-architecture-guide-2-0.aspx

Uma arquitetura de referência interessante é a organização de uma aplicação desktop (Rich Client Application), como vemos a seguir:

image

Note que na camada de negócios, temos os Business Workflows, Business Components e os Business Entities bem definidos. Nesse cenário, os BE's representam as abstrações de dados que obtemos a partir da camada de dados, via Entity Framework.

Na sequência, um bom exemplo de implementação é dado no artigo do John Papa, que segue abaixo:

Entity Framework em arquiteturas de camadas
John Papa
Ref.: http://msdn.microsoft.com/pt-br/magazine/cc700340.aspx

O artigo apresenta uma solução que oferece um bom começo para quem está pensando em projetos com o Entity Framework. A figura a seguir apresenta a organização básica da solução, onde vemos as interfaces em WCF para comunicação entre a camada de apresentação e a camada de negócio.

image

Finalmente, vale lembrar que o Otávio fez uma apresentação sobre o assunto durante o último Tech-Ed Brasil 2008, usando o mesmo artigo do John Papa para falar sobre múltiplos contextos e boas práticas. Veja alguns comentários dele aqui:

Semana de acontecimentos
Ref.: http://blogs.msdn.com/otavio/archive/2008/10/19/semana-de-acontecimentos.aspx

Por enquanto é só! Até o próximo post :)

Waldemir.

  • Ótimo blog Waldemir. Os artigos são super interessantes. Sempre que posso, dou uma passada por aqui. Parabéns!

  • Olá Anderson, tudo certo?

    Obrigado pelos comentários no blog. :)

    Fique sempre a vontade para colocar seus comentários e sugerir temas que sejam relevantes para o nosso dia-a-dia como arquitetos.

    Um abraço e feliz 2009!

    Waldemir.

  • Olá Waldemir,

    Espero que você possa me ajudar.

    Iniciei meus estudos em Entity Framework criando uma aplicação para windows. Mas me deparei com inúmeros problemas que estão me fazendo perder a cabeça.

    Primeiramente tentei utilizar somente um ObjectContext para toda a aplicação, utilizando uma singleton para retornar esse objeto.

    Porém, isso em aplicações windows não fica muito viável pois cada usuário manteria um ObjectContext.

    Dessa forma cada query em linq busca os dados do Contexto, mesmo após o banco ser atualizado por outro usuário. Isso faz que que minha aplicação não mostre os dados reais persistidos em uma busca qualquer.

    Passei entao a usar a "using" para consultas com linq, ou seja, minha aplicação passou a ter n ObjectContexts (como no exemplo do John Papa). Ótimo, cada query me retorna dados atuais do banco. Porém, inclusao de dados fica difícil, já que minhas entidades sao carregadas atraves de n ObjectContexts.

    Segue um exemplo:

     Caixa caixa = new Caixa;

     caixa.nome = "a";

     Caixa.Usuario = managerUsuario.getUsuario(10);

    Nesse caso, quando a entidade caixa é salva, é retornado um erro acusando que sao entidades de contextos diferentes. Não consigo inserir essa entidade (usuario) no contexto que estou usando para salvar.

    Passei entao a usar os objetos detached, porem dessa forma não consigo navegar entre os relacionamentos (associações) das entidades.

    No final, pra cada lado que tento correr, encontro uma parede na frente. Será que o Entity Framework foi preparado especificamente para aplicações que rodam do lado do servidor?

    Você teria alguma sugestão?

    Agradeço pela atenção. Parabens pelo Blog!

  • Olá Anderson, tudo certo?

    Obrigado pelos comentários no blog.

    Esses dias tenho estado em trânsito, por isso a demora no retorno. Durante a semana vou dar uma olhada melhor em exemplos, para retornar algumas sugestões.

    Você chegou a olhar o post do Otávio sobre o artigo do John Papa? Ele fez algumas modificações para o trabalho com múltiplos contextos. Veja abaixo:

    http://blogs.msdn.com/otavio/archive/2008/10/19/semana-de-acontecimentos.aspx

    Em breve eu retorno com novos comentários.

    Um abraço

    Waldemir.

Page 1 of 1 (4 items)
Leave a Comment
  • Please add 5 and 3 and type the answer here:
  • Post