[Angular] Ile zależności w komponencie to już za dużo?

0

Hej, tak się zastanawiam, bo się uczę Angulara i ilość zależności w konstruktorze komponentu niepokojąco mi ciągle rośnie i ciekaw jestem czy to jest norma w Angularze czy już patologia? W C# już dawno bym się zaczął drapać po głowie i zastanawiał jak to rozprowadzić po serwisach, ale w Angularze wszystko się pakuje w konstruktor.

Sam komponent ma mniej niż 100 linii, więc chyba znośnie, ale konstruktor wygląda tak:

  constructor(private router: Router, private formBuilder: FormBuilder, private http: HttpClient, private spinner: NgxSpinnerService, private modalService: ModalService, private recaptchaV3Service: ReCaptchaV3Service, private securityService: SecurityService) {
    this.createForm();
  }
0

Nic szczególnego, stosuj odpowiednie formatowanie to nie będzie to uciążliwe.

2

Imo - dałoby radę pozbyć się pewnie kilku zależności z komponentu. FormBuildera spokojnie można samemu tworzyć. HttpClienta wyniósłbym do osobnego serwisu/effectu odpowiedzianego za Http Requesty (nie zmniejszy to liczby pól w komponencie ale imo lepiej coś takiego w serwisie zostawić, zwłaszcza że z tego będzie można skorzystać w innych miejscach). Spinner - to zależy. Jeżeli z jakiegoś powodu musisz ręcznie obsługiwać show() i hide() możesz wynieść do Interceptora jakiegoś i tam sobie odpalać spinnera wtedy kiedy potrzeba (jeżeli masz jeden spinner na fullscreena to możesz tak zrobić, jeśli masz kilka i musisz odpalać je w ngAfterViewInit - raczej ciężko będzie). Możesz nawet jakiś counter do liczby oczekujących requestów zrobić, żeby nie odpalić hide() kiedy polecą requesty równolegle. ModalService może można byłoby też do effectów wynieść (ale w małych aplikacjach nie stosowałbym raczej ngrx/akity). Reszta raczej musi pozostać.

2

Ogólnie jeśli w komponencie dzieje się za dużo to czasem warto pomyśleć nad jakaś fasada żeby bylo przejrzyście. Często (oczywiście nie zawsze) duża liczba importów świadczy o tym ze komponent ma za duża odpowiedzialność

1 użytkowników online, w tym zalogowanych: 0, gości: 1