javascript / intermediate
Snippet
Kapselung von Repository-Operationen mit abstrakten generischen Basis-Services
Objektorientierte Vererbung ermöglicht die Wiederverwendung zentraler Datenzugriffslogik über mehrere Services hinweg unter Beibehaltung strikter Typverträge. Durch eine abstrakte Basisklasse mit generischem Entity-Interface müssen abgeleitete Services lediglich ihren eindeutigen Endpunkt deklarieren und erben typsichere Abruf- und Löschmethoden ohne redundanten Code.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import { HttpClient } from '@angular/common/http';import { inject } from '@angular/core';import { Observable } from 'rxjs';export interface IdentifiableEntity {id: string | number;}export abstract class AbstractEntityService<T extends IdentifiableEntity> {protected readonly http = inject(HttpClient);protected abstract readonly endpoint: string;public getById(id: T['id']): Observable<T> {return this.http.get<T>(`${this.endpoint}/${id}`);}public deleteById(id: T['id']): Observable<void> {return this.http.delete<void>(`${this.endpoint}/${id}`);}}
angular
Erklärung
1
export abstract class AbstractEntityService<T extends IdentifiableEntity> {
Deklariert einen abstrakten Basis-Service mit einem generischen Typen, der IdentifiableEntity erweitert.
2
protected abstract readonly endpoint: string;
Zwingt alle ableitenden Services dazu, ihren spezifischen API-Endpunkt als Eigenschaft bereitzustellen.
3
public getById(id: T['id']): Observable<T> {
Verwendet indexierte Zugriffstypen (T['id']), um sicherzustellen, dass der Parameter exakt dem Typ der Entity-ID entspricht.
4
return this.http.get<T>(`${this.endpoint}/${id}`);
Führt den typisierten HTTP-GET-Aufruf an die Kombination aus Basis-Endpunkt und Entity-ID aus.