1
resposta

Classes DAO do entity, uma pra cada tabela?

Boa noite! Estou com a seguinte dúvida professores.

Estou construindo uma aplicação usando o Entity frameWorkCore. E estou atualmente com 3 tabelas apenas. Ou seja são 3 tabelas para o entity ter no seu dbSet. Minha dúvida é como refatorar a classe DAO de cada uma dessas 3 tabelas, porque tenho que ficar repetindo o método de Inserir(), ListarTodos() etc em cada uma delas. Gostaria de saber como refatorar e reutilizar o código.

using Projeto.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Projeto.DAO
{
    public class ItemDaListaDAO: IDisposable
    {
        ApplicationContext context;

        public ItemDaListaDAO()
        {
            context = new ApplicationContext();
        }

        public void AdicionarItemDaLista(ItemDaLista item)
        {
            context.ItemDaLista.Add(item);
            context.SaveChanges();
        }

        public void Dispose()
        {
            context.Dispose();
        }
    }
}

e pra cada nova tabela tenho que repetir o código acima. Mudando apenas a tabela..

Alguém pode me ajudar? Obrigado!

1 resposta

Se a implementação de insert/update/delete for genérica, você pode utilizar herança! ;)

public abstract class EntityDAO : IDisposable  {
    protected ApplicationContext Context;

    public EntityDAO() {
        Context = new ApplicationContext();
    }

    public virtual void Insert() {
        // implementation 
    }

    public virtual void Update() {
        // implementation 
     }

    public virtual void Delete() { 
        // implementation 
    }

    public void Dispose() {
        Context.Dispose();
    }
}

E então sua classe:

public class ListItemDAO : EntityDAO {
    public ListItemDAO() : base() {

    }
}

Caso precise mudar o comportamento do insert/update/delete, só sobrescrever o método:

public override void Insert() {
    // new implementation
}

Referência: https://docs.microsoft.com/en-us/dotnet/csharp/tutorials/inheritance