ViewModel Aggregation
This content is not available in your language yet.
Ein ViewModel ist das, was eine Komponente rendert. Es ist nicht das, was die API zurückgibt. Zwischen beidem liegt der Aggregations-Layer.
Was ViewModel Aggregation bedeutet
Abschnitt betitelt „Was ViewModel Aggregation bedeutet“Wenn eine Komponente Daten aus mehreren Quellen braucht, aggregiert der Adapter-Layer:
// API 1: Tasks// API 2: Users// API 3: Projects
// ViewModel für TaskDashboard:interface TaskDashboardViewModel { tasks: { id: string; title: string; assigneeName: string; // aus Users projectName: string; // aus Projects daysOverdue: number; // berechnet }[]; totalCount: number; overdueCount: number;}Die Komponente bekommt ein fertiges ViewModel. Sie berechnet nichts. Sie mappt nichts. Sie rendert.
Wo die Aggregation passiert
Abschnitt betitelt „Wo die Aggregation passiert“In der Domänen-Schicht oder im Store:
readonly taskDashboard = computed(() => ({ tasks: this.tasks().map(task => ({ ...task, assigneeName: this.userIndex()[task.assignedUserId]?.name ?? 'Unbekannt', projectName: this.projectIndex()[task.projectId]?.name ?? 'Kein Projekt', daysOverdue: computeDaysOverdue(task.dueDate), })), totalCount: this.tasks().length, overdueCount: this.tasks().filter(t => t.isOverdue).length,}));Der Vorteil
Abschnitt betitelt „Der Vorteil“Template-Logik (Berechnungen, Fallbacks, Formatierungen) verschwindet aus den Templates. ViewModels sind unit-testbar ohne DOM.