首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >重构:统一输出

重构:统一输出

作者头像
超级大猪
发布2019-11-22 14:50:39
3430
发布2019-11-22 14:50:39
举报
文章被收录于专栏:大猪的笔记大猪的笔记

在项目中,统一返回的入口和出口非常重要。因为你永远没办法知道产品经理下个版本要在返回结果中加什么乱七八糟的东西。

对item的修改,最好抽象成一个组合。用插件的方式进行修改。(有点像commands模式)

首先,创建一个基友类:

class BaseResp(object):
    # 返回结果的基类
    def __init__(self, result):
        self.result = result
        self.modifiers = []

    def add_modifier(self, modifier, args):
        self.modifiers.append([modifier, args])

    def run_modifer(self):
        for item in self.result:
            for modifer in self.modifiers:
                print(modifer)
                modifer[0](item, modifer[1])

子类从基友那里派生出来,这样可以预定义行为。

import baseresp

class ArticleResp(baseresp.BaseResp):
    def __init__(self, result):
        baseresp.BaseResp.__init__(self, result)
        self.add_modifier(add_gif, None)

def add_gif(item, args):
    is_gif = 0
    for pic in item['data']['imgs']:
        if pic['type'] == 'gif':
            is_gif = 1
    item['data']['Gif'] = is_gif

对所有article的数据,检查是否为gif类型,加上gif标签。 这个行为是预定义行为,将会在所有的article中显现。

测试一下:

import article_resp

result = [
    {
        'types': 'article',
        'data':{
            'name': 'hello',
            'imgs':[
                {
                    'type': 'jpeg',
                    'name': 'azdes.jpg'
                },
                {
                    'type': 'jpeg',
                    'name': 'hello.jpg'
                },
            ]
        }
    },
     {
        'types': 'article',
        'data':{
            'name': 'world',
            'imgs':[
                {
                    'type': 'gif',
                    'name': '1azdes.gif'
                },
                {
                    'type': 'jpeg',
                    'name': '3hello.jpg'
                },
            ]
        }
    }
]

article_resp = article_resp.ArticleResp(result)
article_resp.run_modifer()
print(result)

代码很简单,但带来的效果是巨大的。不这样做的代价是惨重的。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档