Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Encapsulamento de métodos com Entity Framework

Queria saber se é possível garantir de alguma forma o encapsulamento dos métodos do Entity, já que todas as entidades e o contexto são classes públicas.

Durante o curso é aconselhado o uso de classes DAO, mas como garantir que apenas o método SALVAR da classe DAO seja usada para essa finalidade e garantir encapsulamento?

4 respostas

Olá Diego,

o grande problema é que pelos modificadores de acesso disponíveis (private, protected, internal e public), realmente não tem um jeito fácil de garantir com 100% de certeza que mais ninguém além dos DAOs tenham acesso a classe contexto. Muito do uso do DAO vem justamente dele ser um design pattern, ou seja, uma boa prática de programação dentro do mundo de OO. Então saber usar e garantir que apenas os DAOs usam o context parte muito de um "bom senso" do programador, não necessariamente o código força o encapsulamento disso no 100%.

Uma forma que eu chuto de como talvez seja possível fazer o código forçar só os DAOs usarem o contexto, apesar de não gostar muito da ideia pela complexidade que ela adiciona, é dentro da sua Solution ter um projeto específico para os DAOs e contexto. Neste projeto o contexto seria internal, ou seja, apenas o projeto tem acesso a esta classe, enquanto que os DAOs são public para que outros projetos possam acessar os seus métodos. Aí bastaria usar este projeto nos outros dentro da Solution.

Olá Lucas,

Deixa eu ver se entendi... Seria adicionar na solução um projeto do tipo Class Library, por exemplo, para fazer toda a implementação das entidades, contexto e classes DAO, deixando o contexto como internal e as classes DAO como public e, no outro projeto da solução, que usará os dados, adicionar a referência ao projeto Class Library.

solução!

É exatamente esta a ideia que eu pensei que talvez ajude. Nunca cheguei a implementar esta solução, mas chuto que deve funcionar.

Lucas,

Implementei como sugeriu e a classe Contexto ficou isolada e era o que queria. Deu muito certo.

Obrigado pela sugestão.