Trovo che nelle prime fasi di un progetto la struttura dei dati restituiti dal server possa cambiare abbastanza frequentemente quando il modello di dati cambia.
Ad esempio, se sto creando un'applicazione che traccia le posizioni dei punti di interesse locali, potrei iniziare restituendo JSON che assomiglia a questo:
[{"name" : "Odeon", "poiType" : "cinema", "lat" : 34.4, "lon" : 10.3},
{"name" : "McDonalds", "poiType" : "restaurant", "lat" : 34.5", "lon" : "10.5"}, ...]
Sul client potrei avere diversi componenti che hanno bisogno delle informazioni lat / lon e in genere accedono ai dati come segue:
function showPointsOfInterest(pois) {
pois.forEach(function (poi) {
var icon = getIcon(poi.poiType);
addToMap(poi.lon, poi.lat, icon);
})
}
function listPointsOfInterest(pois) {
pois.forEach(function (poi) {
var icon = getIcon(poi.poiType);
addToList(poi.lon, poi.lat, icon);
})
}
Quindi decido che mi piacerebbe cambiare la struttura dei dati in modo che ora assomigli a
[
{
"name": "Odeon",
"type": "cinema",
"location": {
"coordinates": {
"lat": 34.4,
"lon": 10.3
},
"address": "Main St, 54"
}
},
{
"name": "McDonalds",
"type": "restaurant",
"location": {
"coordinates": {
"lat": 34.5,
"lon": 10.5
},
"address": "Main St, 154"
}
}, ... ]
Le modifiche sono che poiType
ora è type
, e lat
e lon
ora sono figli di location.coordinates
.
Ora devo cambiare il mio codice lato client in
function showPointsOfInterest(pois) {
pois.forEach(function (poi) {
var icon = getIcon(poi.type);
var coords = poi.location.coordinates;
addToMap(coords.lon, coords.lat, icon);
})
}
function listPointsOfInterest(pois) {
pois.forEach(function (poi) {
var icon = getIcon(poi.type);
var coords = poi.location.coordinates;
addToList(coords.lon, coords.lat, icon);
})
}
Dovendo passare attraverso il codice e trovare dove sto accedendo poiType
, lat
e lon
può essere un dolore.
Quindi mi chiedo se sia una buona pratica creare alcune funzioni di utilità come
function getLon(poi) {
return poi.location.coordinates.lon;
}
function getLat(poi) {
return poi.location.coordinates.lat;
}
function getType(poi) {
return poi.type;
}
e poi avere
function showPointsOfInterest(pois) {
pois.forEach(function (poi) {
var icon = getIcon(getType(poi));
addToMap(getLon(poi), getLat(poi), icon);
})
}
function listPointsOfInterest(pois) {
pois.forEach(function (poi) {
var icon = getIcon(getType(poi));
addToList(getLon(poi), getLat(poi), icon);
})
}
Il vantaggio di questo approccio è che se il mio modello di dati cambia, ho solo bisogno di apportare modifiche alle mie funzioni di utilità.
È questo l'approccio migliore? Ci sono degli svantaggi nel fare questo?