Olá Marcelo, tudo bem?
Obrigada por compartilhar sua dúvida sobre a implementação do CRUD utilizando interfaces e classes default.
Sua sugestão de criar uma classe abstrata default que implemente os métodos do CRUD e permita que as demais classes herdem essa implementação é uma abordagem válida. Isso pode ajudar a evitar a repetição de código nas classes que implementam o CRUD.
No entanto, as interfaces têm como objetivo principal definir um contrato, ou seja, estabelecer quais métodos devem ser implementados pelas classes que a implementam. Ao criar uma classe default que implementa os métodos do CRUD, você estaria fornecendo uma implementação padrão para esses métodos, o que pode diminuir a flexibilidade e a coesão das interfaces.
No contexto apresentado, a aula/exercício fala sobre a importância da coesão nas interfaces. O instrutor sugere separar a interface em duas: uma para escrita (ICommand) e outra para leitura (IQuery). Essa separação visa garantir que cada interface tenha uma única responsabilidade e seja coesa.
Portanto, considere a coesão das interfaces ao implementar o CRUD. Se a sua classe default consegue manter a coesão e a flexibilidade necessárias, você pode utilizá-la. Caso contrário, é recomendado seguir a sugestão do instrutor e separar as interfaces em ICommand e IQuery.
Espero ter esclarecido sua dúvida! Se tiver mais alguma pergunta, é só me dizer.
Espero ter ajudado e bons estudos!