V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fuwu1245
V2EX  ›  问与答

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

  •  
  •   fuwu1245 · 2016-12-06 10:23:23 +08:00 · 1762 次点击
    这是一个创建于 2903 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    业务描述:
    整个导出业务分为了两个模块
    一个模块 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
    RihcardLu
        1
    RihcardLu  
       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 分支可以参考《代码大全》提到的表驱动法。
    BinaryLeeward
        2
    BinaryLeeward  
       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   ·   实用小工具   ·   2790 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:37 · PVG 16:37 · LAX 00:37 · JFK 03:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.