iTeacher icon indicating copy to clipboard operation
iTeacher copied to clipboard

Interface Segregation Principle (ISP)

Open marconato7 opened this issue 1 year ago • 0 comments

A ISP diz o seguinte: Clients should not be forced to depend upon interfaces that they do not use.

No arquivo base-repository.interface.ts, existem alguns métodos (crud básico), mas também existe este: findByEmail(email: string): Promise<T | null>;.

Para adequar o código ao príncipio, esse método deveria ser movido para users.repository.interface.ts.

Na realidade, o padrão generic repository, nesta fase do projeto, poderia ser considerado como over engineering, afinal só existe um módulo (e este módulo utiliza apenas dois métodos do repositório: create e findByEmail).

Ao longo prazo, isso também é ruim, porque quanto mais métodos você enfia no base-repository, mais métodos ficam disponíveis para implementações que não precisam de todos estes métodos, aumentando a área de superfície para bugs e violações de outros princípios. Por exemplo, imagine uma implementação chamada AulaRepository fazendo o uso do método findByEmail: não faz sentido, correto?

marconato7 avatar Oct 12 '23 18:10 marconato7