首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >随着服务器响应的发展,如何最好地防止前端代码的出现?

随着服务器响应的发展,如何最好地防止前端代码的出现?
EN

Software Engineering用户
提问于 2015-10-05 10:00:57
回答 1查看 103关注 0票数 2

我发现,在项目的早期阶段,服务器返回的数据结构可能会随着数据模型的变化而频繁变化。

例如,如果我正在构建一个绘制本地感兴趣点位置的应用程序,我可能首先返回如下所示的json:

代码语言:javascript
运行
复制
[{"name" : "Odeon", "poiType" : "cinema", "lat" : 34.4, "lon" : 10.3}, 
 {"name" : "McDonalds", "poiType" : "restaurant", "lat" : 34.5", "lon" : "10.5"}, ...]

在客户机上,我可能有几个需要lat/lon信息的组件,它们通常按如下方式访问数据:

代码语言:javascript
运行
复制
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);
     })
}

然后,我决定要更改数据结构,使其现在看起来像

代码语言:javascript
运行
复制
[
{
    "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"
    }
}, ... ]

现在的变化是poiType现在是typelatlon现在是location.coordinates的子代。

我现在需要将我的客户端代码更改为

代码语言:javascript
运行
复制
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);
    })
}

必须遍历代码并找到我访问poiTypelatlon的位置可能会很痛苦。

所以我想知道创建一些实用函数是否是一个好的实践,比如

代码语言:javascript
运行
复制
function getLon(poi) {
    return poi.location.coordinates.lon;
}

function getLat(poi) {
    return poi.location.coordinates.lat;
}

function getType(poi) {
    return poi.type;
}

然后拥有

代码语言:javascript
运行
复制
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);
    })
}

这种方法的优点是,如果数据模型发生变化,我只需要对实用程序函数进行更改。

这是最好的办法吗?这样做有什么坏处吗?

EN

回答 1

Software Engineering用户

发布于 2015-10-05 15:38:36

通常的方法是对API进行版本化。您的API仍然使用旧URI上的旧数据结构进行响应。然后,使用新的数据结构向API添加另一个URI。然后,客户端代码仍然继续在旧数据上工作,直到您有时间更改它。这是当您有外部客户时,根据您的API所必须做的事情。

如果您只是一个完美主义者,然后保持客户端代码与更改同步,那么您可以使用任何适合您的策略。请记住,您从API返回的数据不必是数据的规范版本。它可以表示最适合用例的数据。在这种情况下,平面对象似乎与更有组织的版本一样好,如果不是更好的话。

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/299022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档