作者zzss2003 (brotherD)
看板C_and_CPP
标题[讨论] 给UI层的介面与底层的介面不一致,何解?
时间Mon Mar 4 15:59:30 2019
在一个系统中,UI层负责与网页互动、沟通;底层则负责处理资料、把处理完毕的资料送
给UI层。
在理想的情况下,UI层如果需要底层的参数,照理说应该只要呼叫一个function call,其
他的事情都不用做;同理,底层如果需要从UI层传回来的参数,应该也只需要呼叫一个
function call就好
在我的状况,UI层与底层的互动上出了点问题,我不太晓得原因出在哪,也不太清楚要怎
麽解决问题,所以上来请教各位方法。
A: 负责写网页UI层的同事
B: 负责写底层的同事
但我们公司的情况却不是这样子...以我这例子,给UI层的介面(A写的)为:
https://ideone.com/Tf4Uwv
底层的介面(B写的)为:
https://ideone.com/lK0yxc
#note1: 要给网页User看的设定参数,但我在B的程式码中找不到此变数
#note2: A需要这些设定参数给使用者设定,但我没办法在B的程式码中找到这些变数
我的任务是负责填满以及储存这些变数
填满: 系统刚开机时,放入初始值到这个型别的变数,A再拿去用
储存: 使用者从网页上设定参数,A把参数放在这个型别的变数,我再把它拿到另一个变数
给B用
为了完成我的任务,我必须:
1. 去问A: 为什麽这些#note1的参数你没有打在你的结构里面,这些参数我有在B的程式码
里面看到,还是因为这些参数并没有要显示在网页上? 还是你少打?
2. 去问A: 那你这些note2多打的是什麽? 是用来呈现在网页上的吗? 还是因为你自己要记
录一些资讯,所以才跟这些参数放在一起?
3. 去问B: 为什麽有些A打的参数,我在你的程式码里面找不到,还是你没有统一放在一起
,而是放在别的file里面?
4. 去问A/B: 为什麽你跟B/A用的型别不一样? 为什麽不统一?
4. 去问A/B: 为什麽你跟B/A写的参数用不一样的名字?
总之就是要当一个中间者,负责A跟B双方之间的沟通,我才有办法了解双方的逻辑,并不
能单纯透过程式码就完成我的任务。
请问一下,会造成这个情况,是因为发生了什麽问题? 程式没有模组化? 没有统一的spec?
没有做information hiding?
麻烦各位前辈了~谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.163.216.18
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1551686376.A.9CF.html
※ 编辑: zzss2003 (118.163.216.18), 03/04/2019 16:01:25
1F:→ longlongint: 先问 A B 吧,自己乱猜容易悲剧。 推测 A偏向使用者 03/04 16:23
2F:→ longlongint: 在UI产生的第一手资料,给人类看的; B 偏通讯或硬体 03/04 16:23
3F:→ longlongint: 限制,给机器看的。 03/04 16:23
4F:→ longlongint: 先问栏位意义 能转换的就转 不能转的请他们帮忙补 03/04 16:24
是的,你的猜测并没有错,不过既然你需要猜测,那代表我写的不够清楚?
我的问题比较偏向: 如何用文件/程式技巧制定规范,让A与B在该规范下codeing,好让我
不用在A跟B之间两头烧
※ 编辑: zzss2003 (118.163.216.18), 03/04/2019 16:43:29
5F:→ james732: 应该要明确定义出两者的interface/function要长什麽样子 03/04 17:24
6F:→ MOONRAKER: 真的把程式当国文在读。 03/04 17:53
7F:→ MOONRAKER: 你这个情况在各自为政的开发团队内称为「正常」 03/04 17:55
8F:→ MOONRAKER: 接别人的API也很容易发生。 03/04 17:57
请问,加入物件导向的观念後,也没办法改善这种情况吗?
※ 编辑: zzss2003 (118.163.216.18), 03/04/2019 18:04:24
9F:→ james732: 物件导向可能会有帮忙,但也可能越帮越忙 XD 03/04 18:17
10F:→ james732: 最重要的还是两边设计的沟通与协调 03/04 18:18
11F:→ bluesoul: A B需要直接对话 03/04 18:53
12F:推 CoNsTaR: 底层和UI考虑的点本来就不一样,适合的 representation 03/04 19:16
13F:→ CoNsTaR: 也就不一样,不然怎麽会需要你来做两个之间的 mapping.. 03/04 19:16
14F:→ CoNsTaR: . 不要自己做不出来就想着炮别人有问题啊 03/04 19:16
15F:→ longlongint: 跟问栏位对应跟数值范围 例如u16存float要 byte 照存 03/04 19:22
16F:→ longlongint: 还是乘以一千再存之类的 03/04 19:22
17F:推 IhateOGC: 後端存的是真值,前端太常改变,例如打折到底要显示几位 03/04 23:58
18F:→ IhateOGC: 先累加再打折还是先打折再累加,这个如果还要传到後端 03/04 23:58
19F:→ IhateOGC: 这样的话User会觉得你们家网页效率很差 03/04 23:59
20F:→ IhateOGC: A应该是把值接回来後才转型填入struct 03/05 00:01
21F:→ firejox: 把A B都抓来开会 03/05 02:06
嗨,谢谢各位的建议,听完大家的讨论後,我比较清楚该怎麽做了!
※ 编辑: zzss2003 (118.163.216.18), 03/05/2019 09:11:40