I use the following project pattern:
WheretheInterfacewillonlycommunicatewiththeapplicationanditwillcommunicatewiththeRepository.Sotheinterfacewillhavenorestrictionsandnoknowledgeofhowcommunicationwiththedatabaseoccurs.InmycaseIusetheEntityFramework,butinthisschemeIcaneasilybeusingothermethodsofcommunication.
TheApplicationhastwoclassesforeachDomainclass:
publicclassCartasAplicacao{privatereadonlyIRepositorio<Cartas>repositorio;publicCartasAplicacao(IRepositorio<Cartas>repo){repositorio=repo;}publicvoidSalvar(Cartascarta){repositorio.Salvar(carta);}publicvoidExcluir(Cartascarta){repositorio.Excluir(carta);}publicIEnumerable<Cartas>ListarTodos(){returnrepositorio.ListarTodos();}publicCartasListarPorId(stringid){returnrepositorio.ListarPorId(id);}}
E:
publicclassCartasAplicacaoConstrutor{publicstaticCartasAplicacaoCartasAplicacaoEF(){returnnewCartasAplicacao(newCartasRepositorioEF());}}
IntheRepositoryEFIdothefollowing:
publicDbSet<SBE_ST_BannerRotativo>BannerRotativo{get;set;}publicDbSet<Cartas>Cartas{get;set;}publicContexto():base("BancoDados")
{
Database.SetInitializer<Contexto>(null);
}
E:
public class CartasRepositorioEF: IRepositorio<Cartas>
{
private readonly Contexto contexto;
public CorpoDocenteRepositorioEF()
{
contexto = new Contexto();
}
public void Salvar(Cartas entidade)
{
if (entidade.Id > 0)
{
var cartaAlterar = contexto.Cartas.First(x => x.Id == entidade.Id);
cartaAlterar.Descricao = entidade.Descricao;
cartaAlterar.Imagem = entidade.Imagem;
cartaAlterar.Nome = entidade.Nome;
}
else
{
contexto.CorpoDocente.Add(entidade);
}
contexto.SaveChanges();
}
public void Excluir(Cartas entidade)
{
var cartaAlterar = contexto.Cartas.First(x => x.Id == entidade.Id);
contexto.Set<Cartas>().Remove(cartaAlterar );
contexto.SaveChanges();
}
public IQueryable<Cartas> ListarTodos()
{
return contexto.Cartas;
}
public Cartas ListarPorId(int id)
{
return contexto.Cartas.FirstOrDefault(x => x.Id == id);
}
}
Then to use the Interface:
var bdcarta = CartasAplicacaoConstrutor.CartasAplicacaoEF();
bdcarta.Salvar(carta);
My doubts are about what the pros and cons are about this project template. If there are other patterns that are "better" than this one.