关于一个模块的逻辑设计。。内详。。内容比较长 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fuwu1245
V2EX    问与答

关于一个模块的逻辑设计。。内详。。内容比较长

  •  < href="Javascript:" Onclick="downVoteTopic(325563);" class="vote">
  •   fuwu1245 2016-12-06 10:23:23 +08:00 2175 次点击
    这是一个创建于 3292 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近被上司安排了一个任务,苦思冥想许久未想出比较好的设计,特来问下各位有经验的前辈,问题的详情如下
    问题是关于一个导出功能的设计

    业务描述:
    整个导出业务分为了两个模块
    一个模块 A 负责处理用户的操作以及从后台取数据(json 格式),但是导出时需要只取这些数据中的部分字段,取哪部分字段由模块 B 决定
    一个模块 B ,需要根据模块 A 发来的参数返回需要取的“哪部分数据”,
    如果 A 发来的导出参数是甲,则返回导出甲时需要取的 json 中的字段,举例有 19 个字段
    如果 A 发来的导出参数是乙,则返回导出乙时需要取的 json 中的字段,举例有 20 个字段
    这 19 个字段和 20 个字段之间有部分字段可能是相同的

    限制
    现在前面所说的导出参数总共有多达 19 种,后续还可能会拓展,每一种都需要十多个字段,我的想法是根据 A 发来的导出参数 switch , case 来返回需要的数据
    按照我的思路来的话,这个模块 B 的代码会很长
    上司的要求是,由于整个模块是单页面应用的设计,所有的模块都需要加载到客户端运行,所以上司要求我努力缩减这个模块 B 的大小,即代码行数等最优,经验有限,在网上也没找到类似的设计

    只能来这里求助各位前辈了。。

    5 条回复    2016-12-06 11:23:53 +08:00
    kechx
        1
    kechx  
       2016-12-06 10:50:50 +08:00   1
    1. 从后台取出所有数据( A )
    2. 导出选项展示给用户( A ?)
    3. 用户选择导出部分数据(用户交互属于 A ,但你又说取字段由 B 决定,疑惑)
    4. 导出数据( A ?)
    不知上面的理解是否有误?

    按照我的理解, A 负责处理数据, B 负责交互
    1. 取数据( A )
    2. 导出选项( B )
    3. 用户选择( B )
    4. 传参给 A ,导出( A )

    至于你说的多 Switch 分支可以参考《代码大全》提到的表驱动法。
    QcXzmLom
        2
    QcXzmLom  
       2016-12-06 11:00:05 +08:00   1
    B 模块搞一个配置 , 配置中 A 传过来的参数对应所需的字段, B 模块根据 A 传的参数从配置中取对应的字段,
    B 模块有新增的参数时,加一行配置就行,不知道这种方式是否符号你的需求。
    fuwu1245
        3
    fuwu1245  
    OP
       2016-12-06 11:13:01 +08:00
    @RihcardLu 唔。。
    我觉得我的表达方式有问题,思考了下,可以精简为这个问题
    一个函数接受一个参数,返回一个数组,参数的可能值有多个,且返回的数组都是纯常量字符串数组,如果返回的数组有部分是相同的,如何设计 这个函数使得代码行数最小?

    看了下表驱动法,有点意思,研究下
    fuwu1245
        4
    fuwu1245  
    OP
       2016-12-06 11:14:23 +08:00
    @BinaryLeeward
    还算满足,但没戳到痛处 哈哈
    如果按照我的想法,会有大量的 switch case 感觉不舒服,所以想换个写法
    wshcdr
        5
    wshcdr  
       2016-12-06 11:23:53 +08:00   1
    如果是单纯是要让 B 最瘦,让可以在 B 的数据源上向办法,把逻辑放到数据源上, B 就变成单独的简单转调
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     946 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 22:36 PVG 06:36 LAX 14:36 JFK 17:36
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86