C'è un'applicazione che serve un enorme elenco di risorse e nell'interfaccia utente gli utenti sono in grado di filtrare le risorse in base al tipo e ad altre proprietà.
Le risorse sono di tipi diversi ma hanno poche proprietà comuni in esse. Ad esempio ci sono risorse di tipo Car
, Book
e Pet
ciascuna ha colore, prezzo, proprietario e tipo come proprietà comune.
Attualmente l'applicazione ha un endpoint /resources
che invia tutte le risorse contemporaneamente come JSON che è un elenco di oggetti risorsa, ora a causa di questo approccio quasi tutti gli oggetti hanno pochi campi con valori null
e le proprietà che non ha alcun senso.
Prendiamo un esempio:
[{
type: 'car',
color: 'red',
price: '1000',
owner: 'foo',
engines: '2',
tyres: '4',
capacity: '2',
name: null
},{
type: 'pet',
color: 'red',
price: '10',
owner: 'foo',
engines: null,
tyres: null,
capacity: null,
name: 'koo'
},{
type: 'book',
color: null,
price: '1000',
owner: 'foo',
engines: null,
tyres: null,
capacity: null,
name: 'theory of everything'
}, ...];
Una volta che i dati sono in primo piano, l'utente può applicare qualsiasi tipo di filtro per ottenere le informazioni richieste.
I problemi:
- Esiste una singola tabella dell'interfaccia utente e l'intestazione viene modificata in base alla risorsa mostrata.
- Il front-end (
typescript
) e il back-end (java
) sono molto controllati e il codice basato sembra (è) ripetitivo e fragile.
Domande:
Il progetto è ancora in fase iniziale e quindi posso chiedere il refactoring che può fornire un guadagno a lungo termine, stavo pensando se ci fosse bisogno di punti finali diversi e quindi aggregarli nel front-end? ma poi ci sarebbero molte chiamate API per ogni tipo di risorsa e l'interfaccia utente potrebbe essere in stato incoerente se tutti i dati non riescono a caricare.