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

2016-12-06 10:23:23 +08:00
 fuwu1245

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

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

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

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

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

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

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

看了下表驱动法,有点意思,研究下
fuwu1245
2016-12-06 11:14:23 +08:00
@BinaryLeeward
还算满足,但没戳到痛处 哈哈
如果按照我的想法,会有大量的 switch case 感觉不舒服,所以想换个写法
wshcdr
2016-12-06 11:23:53 +08:00
如果是单纯是要让 B 最瘦,让可以在 B 的数据源上向办法,把逻辑放到数据源上, B 就变成单独的简单转调

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/325563

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX