1
resposta

[Sugestão] Explica o conceito, mas..

Sei que a ideia é explicar o conceito, mas chega um ponto que a interface IQuery e ICommand vão ter métodos que talvez eu não queira implementar. Tomando por base o exemplo das categorias, se eventualmente eu não quiser trazer só uma especifica e o que importa é só ter a lista dela, a interface IQuery teria que ser alterada novamente para atender esse meu caso específico. Nesse caso, teria que criar um IQueryList e um IQueryOne (algo assim) e faria o IQuery extender de IQueryList e IQueryOne pra não afetar as demais partes do sistema.

Uma sugestão de abordagem que eu sigo nesse caso é criar uma classe abstrata de Repository (RepositoryBase) com os métodos basico de CRUD, e simplesmente extendo dessa classe e declaro os métodos que eu preciso na interface do repository que estou implementando.


    public class CategoriaRepository : RepositoryBase<Categoria>, ICategoriaRepository {}

    public interface ICategoriaRepository 
    {
        IEnumerable<Categoria> ObterTodos();
    }

    public abstract class RepositoryBase<TEntidade> 
        where TEntidade : EntidadeBase
    {
        // Implementação dos métodos de CRUD
    }

1 resposta

Olá Jonas, obrigada por compartilhar sua sugestão conosco!

De fato, é comum que em alguns casos específicos as interfaces possam precisar de ajustes para atender às necessidades do sistema. Sua sugestão de criar uma classe abstrata de Repository com os métodos básicos de CRUD e estender dessa classe para declarar os métodos necessários na interface do repository é uma abordagem interessante e pode ajudar a evitar a necessidade de criar interfaces adicionais.

Além disso, é importante lembrar que os princípios SOLID são apenas diretrizes e não regras rígidas. Cada projeto tem suas particularidades e pode precisar de adaptações para atender às suas necessidades específicas.

Espero ter ajudado e bons estudos!