1
resposta

Está errado a nomenclatura das classes

Como exemplo, vamos implementar um exemplo onde temos tanto uma camada DAL quanto classes DAO para diferentes entidades. A ideia é ter uma arquitetura organizada onde a DAL fornece a infraestrutura para acesso ao banco de dados e as classes DAO lidam com as operações específicas para cada entidade.

Arquivos do Projeto

Connection.cs

namespace ScreenSound5.Banco
{
    using Microsoft.Data.SqlClient;

    public class Connection
    {
        private readonly string _connectionString;

        public Connection(string connectionString)
        {
            _connectionString = connectionString;
        }

        public SqlConnection ObterConexao()
        {
            return new SqlConnection(_connectionString);
        }
    }
}

DataAccessLayer.cs (DAL)

namespace ScreenSound5.Banco;

    public class DataAccessLayer
    {
        private readonly Connection _connection;

        public DataAccessLayer(Connection connection)
        {
            _connection = connection;
        }

        public IEnumerable<Artista> ListarArtistas()
        {
            var artistaDAO = new ArtistaDAO(_connection);
            return artistaDAO.Listar();
        }

        public void AdicionarArtista(Artista artista)
        {
            var artistaDAO = new ArtistaDAO(_connection);
            artistaDAO.Adicionar(artista);
        }

        public IEnumerable<Album> ListarAlbuns()
        {
            var albumDAO = new AlbumDAO(_connection);
            return albumDAO.Listar();
        }

        public void AdicionarAlbum(Album album)
        {
            var albumDAO = new AlbumDAO(_connection);
            albumDAO.Adicionar(album);
        }

        public IEnumerable<Musica> ListarMusicas()
        {
            var musicaDAO = new MusicaDAO(_connection);
            return musicaDAO.Listar();
        }

        public void AdicionarMusica(Musica musica)
        {
            var musicaDAO = new MusicaDAO(_connection);
            musicaDAO.Adicionar(musica);
        }
    }
}

ArtistaDAO.cs (DAO)

namespace ScreenSound5.Banco;

    internal class ArtistaDAO
    {
        private readonly Connection _connection;

        public ArtistaDAO(Connection connection)
        {
            _connection = connection;
        }

        public IEnumerable<Artista> Listar()
        {
            var lista = new List<Artista>();
            using var connection = _connection.ObterConexao();
            connection.Open();

            SqlCommand command = new("SELECT * FROM ARTISTAS", connection);
            using SqlDataReader dataReader = command.ExecuteReader();

            while (dataReader.Read())
            {
                string nomeArtista = Convert.ToString(dataReader["Nome"])!;
                int idArtista = Convert.ToInt32(dataReader["Id"])!;
                string bioArtista = Convert.ToString(dataReader["Bio"])!;
                string fotoPerfil = Convert.ToString(dataReader["FotoPerfil"])!;

                Artista artista = new(nomeArtista, bioArtista, fotoPerfil) { Id = idArtista };
                lista.Add(artista);
            }
            return lista;
        }

        public void Adicionar(Artista artista)
        {
            using var connection = _connection.ObterConexao();
            connection.Open();

            SqlCommand command = new("INSERT INTO Artistas (Nome, FotoPerfil, Bio) VALUES (@nome, @fotoPerfil, @bio)", connection);

            command.Parameters.AddWithValue("@nome", artista.Nome);
            command.Parameters.AddWithValue("@fotoPerfil", artista.FotoPerfil);
            command.Parameters.AddWithValue("@bio", artista.Bio);

            int retorno = command.ExecuteNonQuery();
            Console.WriteLine($"Linhas afetadas: {retorno}");
        }
    }
}

AlbumDAO.cs (DAO)

namespace ScreenSound5.Banco;

    internal class AlbumDAO
    {
        private readonly Connection _connection;

        public AlbumDAO(Connection connection)
        {
            _connection = connection;
        }

        public IEnumerable<Album> Listar()
        {
            // code
        }

MusicaDAO.cs (DAO)

namespace ScreenSound5.Banco;
    internal class MusicaDAO
    {
        // code
    }

Resumo

  • DAL (Data Access Layer): DataAccessLayer.cs é uma camada que abstrai a interação com várias entidades do banco de dados.
  • DAO (Data Access Object): ArtistaDAO.cs, AlbumDAO.cs, MusicaDAO.cs são classes que lidam com as operações específicas de cada entidade.

Conclusão

Portanto, faz mais sentido nomearmos as classes que fazem consulta a entidades especificas para DAL, por exemplo: ArtistaDAO, MusicaDAO, EntidadeDoBDDAO, correto?

1 resposta

Olá Guilherme! Tudo joia?

Entendi seu ponto sobre a nomenclatura das classes na arquitetura que você está implementando, como você descreveu está correta.

O DataAccessLayer serve como uma camada de abstração que utiliza os DAOs (ArtistaDAO, AlbumDAO, MusicaDAO) para realizar operações específicas em cada entidade. Isso mantém sua arquitetura organizada e facilita a manutenção e expansão do código.

Mas a escolha de estrutura de nomenclatura aplicado no projeto da aula não se apresenta como errada, mas sim como uma forma mais simplificada de implementação, para seja nivelada ao nível geral de conhecimentos dos alunos, o que não impede de você utilizar da forma na qual você trouxe.

Bons estudos!