Usuário com melhor resposta
Estrutura de Projetos ASPX + EF

Pergunta
-
Olá Pessoal,
Não sei ao certo se o que estou fazendo é uma pergunta, mas acho que este tópico poderá mais "virar" uma discussão...
O caso é que... Estou passando a utilizar (e finalmente entender) o funcionamento do Entity Framework (vlw Renato Haddad)...
E estou com um questionamento...
Quando desenvolvo ASP.NET "normal" eu faço da seguinte forma...
Crio uma Solution com os seguintes projetos:
- Interface (Onde irão ficar as minhas páginas)
- BLL (Minha camada de negócios)
- DAL (Minha camada de acesso a dados)
- DTO (Que são os objetos que uso para representar as tabelas do meu banco de dados, cujas informações são manipuladas pela Interface e Persistidas no banco pela DAL, através da BLL) (O projeto Interface só tem referência para a BLL e DTO, não encherga a DAL)
Como o EF faz para mim o trabalho de ser meu Modelo (DTO) e a persistência dos dados do modelo (DAL), como faço para ter a minha camada de regras de negócio (BLL)???
Vocês costumas separar isso em projetos?!
Agradeço imensamente a atenção de todos vc's...
Um grande abraço!
Jefferson.
Respostas
-
Olá Jefferson,
Eu costumo criar minhas aplicações do mesmo modo que o Paulo César.
Faço isso pela possibilidade de diminuir as dependências entre as camadas do meu projeto, para que quando eu precisar mudar alguma tecnologia eu consiga fazer isso de modo bastante fácil.
Lhe envio dois links que podem lhe ajudar:
http://ferhenriquef.wordpress.com/2011/10/25/entity-framework-4-1-mvc-dao/
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenrique- Marcado como Resposta Jefferson Balivo quarta-feira, 28 de dezembro de 2011 12:58
Todas as Respostas
-
-
Eu costumo separar deste jeito que você faz. A diferença é que DTO não é utilizado para representar as tabelas do meu banco. Isto Eu já tenho no model do EF. Um DTO uso justamente para retornar um objeto com propriedades que preciso. Por exemplo: ao exibir informações no gridview você não precisa trazer duas ou mais tabelas carregadas. Para isto Eu crio uma classe DTO que vai ter somente as propriedades que preciso.
A BLL continua com o papel dela. Recebe dados da interface, valida alguma coisa e repassar para a DAL. A DAL envia algo para a BLL e a BLL para a interface.
ps: aqueles videos do Renato Had. são bons né?
--
Marque as respostas e ajude a melhorar a busca do fórum.- Editado Paulo César Viana sexta-feira, 23 de dezembro de 2011 13:33
-
Cara... Foi vc mesmo que me passou os vídeos... Vlw... São excelentes...
Então... Mas como ficaria isso numa Solution... E como ficaria um método na BLL...
Vc receberia o Contexto via parâmetro... E retornaria o contexto com as modificações da BLL para a interface?!
Só precisaria ver a coisa funcionando... Pra tirar uma base...
-
-
O contexto via parametro? Nunca. Via parametro somente a Entidade carregada.
O contexto só a dal que vai usar.
--
Marque as respostas e ajude a melhorar a busca do fórum.
Tem como mandar um print de como fica uma Solution?E um exemplo de código dessa BLL e DAL?
Grato,
Jefferson.
-
-
Olá Jefferson,
Eu costumo criar minhas aplicações do mesmo modo que o Paulo César.
Faço isso pela possibilidade de diminuir as dependências entre as camadas do meu projeto, para que quando eu precisar mudar alguma tecnologia eu consiga fazer isso de modo bastante fácil.
Lhe envio dois links que podem lhe ajudar:
http://ferhenriquef.wordpress.com/2011/10/25/entity-framework-4-1-mvc-dao/
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenrique- Marcado como Resposta Jefferson Balivo quarta-feira, 28 de dezembro de 2011 12:58
-
Hum... Interessante...
Estou analisando a possibilidade de não usar POCO...
Comprei uns Livros e um material de EF... Tem umas coisas muito interessantes usando o modo de design...
A ajuda foi muito bem vinda e me esclareceu muitas dúvidas...
-
Se precisar de ajuda com o Entity Framework é só entrar em contato =]
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.wordpress.com/
Twitter: @ferhenrique -
-
Olá Clever,
Tudo bem?
Não tenho este exemplo com EF 5 e MVC 4.
Aqui tem um exemplo com o EF 5: http://ferhenriquef.com/2012/07/07/ef-code-first-design-patterns-asp-net-multi-camadas-e-muito-trabalho/
Aqui tem alguns links uteis:
http://www.codeproject.com/Articles/468777/Code-First-with-Entity-Framework-5-using-MVC4-and
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Obrigado pela resposta Fernando !!
Aproveitando queria lhe fazer outra perguta, estou estudando estas tecnologias acima para fazer um ERP, onde eu terei modulos financeiro, controle de acesso, compras, vendas, etc. e dentro dos modulos as funcionaldiades propriamente ditas, ou seja, os CRUDs. A minha dúvida é: como seria a melhor forma de estruturar o projeto de forma que tenha menor tenha menor impacto na manutenção de funcionalidade em produção ? Vou lhe passar um exemplo, imagine que eu tenha uma funcionalidade de recebimento de caixa (proveniente do modulo financeiro) com um bug e necessite de manunteção imediata, ou seja, há uma maneira de publicar uma versão corrigida desta funcionalidade sem ter impacto em todo modulo financeiro ou até mesmo no sistema como um todo ?
att.,
Clever almeida
-
Olá Clever,
Neste caso, acredito que o melhor seja vc dividir em class libraries o comportamento e as regras de negócios de cada módulo da sua aplicação.
Com relação a sua manutenção causar impacto na aplicação... Sempre que temos um site rodando em um diretório virtual qualquer alteração no diretório bin fará com que o diretório virtual se atualize, derrubando a aplicação por alguns intantes, recompilando e então voltando ao seu funcionamento normalmente.
Mas, é possível substituir uma DLL sem que a sua aplicação reinicie. Vc pode fazer isso via reflection... Que obrigaria vc a ler um arquivo físico (no caso uma DLL) para instânciar uma classe dinamicamente.
Mas, para fazer isso do jeito correto, acredito que vc terá de usar um design pattern chamado Factory, que é uma classe responsável por criar instâncias de outras classes. No caso, sua classe factory ficaria responsável por encapsular a leitura via reflection e criar as instâncias corretamente para trabalhar 'on the fly'.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil