Есть ли способ улучшить качество кода путем внедрения / импорта службы в класс, который не является компонентом / службой / хранилищем? - PullRequest
1 голос
/ 28 октября 2019

В этом примере я буду использовать 2 файла (LogService и LoggedConflictException).

Я бы хотел внедрить LogService в класс LoggedConflictException, а не передавать его через конструктор или метод LoggedConflictException. Вот что я делаю сейчас (и мне это совсем не нравится):

export class LoggedConflictException extends ConflictException {

    constructor( logService: LogService, options?: { 
        purpose?: string, 
        credentials?: any, 
        message?: string | object | any, 
        error?: string 
    } ) {
        super( options.message );

        // the fact that I have to pass logService instance every time does make me worry.
        // I would like to inject logService directly without the need to pass it down from other classes.
        logService.createLog( options.purpose, options.message, options.credentials, options.error );
    }
}

И вот как я передаю экземпляр logService с моего контроллера:

@Controller('auth')
export class AuthController {

    constructor( private logService: LogService ) {}

    @Post( '/test' )
    test(): Promise<any> {
        const options = { 
            purpose: LOG_PURPOSE.TEST, 
            message: EXCEPTION_MESSAGE.TEST_MESSAGE 
        };
        throw new LoggedConflictException( this.logService, options ); // <- I don't like to pass this.logService every time when I want to log and throw an exception!
        // instead I want to have a code that looks like this:
        throw new LoggedConflictException( options );
    }

}

Я надеюсь, что мой вопрос имеет смысл, и что кто-то может помочь любому человеку, который изо всех сил пытается получить чистый код, такой же как я.

...