由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 关于一个web系统设计的细节
进入Programming版参与讨论
1 (共1页)
s*****w
发帖数: 1527
1
我们组的要求是web backend 把error message string 发给web front end。
对此我非常反感,我认为只发error code就可以。
backend code and frontend code共享一个error_message_strings文件,因为2个repo
共享一个文件用来build,不会有不磨合的地方。
大家请批评指教。
s********e
发帖数: 340
2
Code更简洁些,但是也区别不多,可能其他人为了API的使用方便吧,省去了别人调用
API时,看到Code还要去查是什么意思。

repo

【在 s*****w 的大作中提到】
: 我们组的要求是web backend 把error message string 发给web front end。
: 对此我非常反感,我认为只发error code就可以。
: backend code and frontend code共享一个error_message_strings文件,因为2个repo
: 共享一个文件用来build,不会有不磨合的地方。
: 大家请批评指教。

s********e
发帖数: 340
3
Code更简洁些,但是也区别不多,可能其他人为了API的使用方便吧,省去了别人调用
API时,看到Code还要去查是什么意思。

repo

【在 s*****w 的大作中提到】
: 我们组的要求是web backend 把error message string 发给web front end。
: 对此我非常反感,我认为只发error code就可以。
: backend code and frontend code共享一个error_message_strings文件,因为2个repo
: 共享一个文件用来build,不会有不磨合的地方。
: 大家请批评指教。

m*****n
发帖数: 3575
4
错误有保密的需求吗?
没有就发更好。便于frontend写逻辑
s*****w
发帖数: 1527
5
我不愿意从web backend发message string的原因是反正已经发了error code。
而且如果是java backend, 尼玛的还要搞出一大堆error class,神经病啊
n******t
发帖数: 4406
6
照理說應該是直發code。
但是這個particular use case,我覺得你的argument贏不了。web本來就是一個講究開
發速度不注重性能的地方,都發過去所有用你service的人都省事,至於最後用這個東
西的人多幾個cpu cycle,nobody cares。

repo

【在 s*****w 的大作中提到】
: 我们组的要求是web backend 把error message string 发给web front end。
: 对此我非常反感,我认为只发error code就可以。
: backend code and frontend code共享一个error_message_strings文件,因为2个repo
: 共享一个文件用来build,不会有不磨合的地方。
: 大家请批评指教。

y********a
发帖数: 1
7
你return 400也不说request哪里错了,人怎么debug?跟你integrate一个复杂的api,
要pass十几个argument,咋知道是哪个argument忘了发,哪个发错了?软件开发最重要
的就是clear communication
n******t
发帖数: 4406
8
你說的話技術上來說沒道理,因爲兩邊都有error string,所以error code是夠的。
同時,因爲他周圍most likely都是你這樣的人,所以我也覺得他該這麼幹。

【在 y********a 的大作中提到】
: 你return 400也不说request哪里错了,人怎么debug?跟你integrate一个复杂的api,
: 要pass十几个argument,咋知道是哪个argument忘了发,哪个发错了?软件开发最重要
: 的就是clear communication

s********e
发帖数: 340
9
楼主说是用Java开发,自定义一个Error类,里面两个成员变量,一个是Code,一个是
Message。Server直接把Error类对象发给前段,前段Code和Message都有了,这不就两
全其美了吗。这点事有什么难解决的地方?

【在 n******t 的大作中提到】
: 你說的話技術上來說沒道理,因爲兩邊都有error string,所以error code是夠的。
: 同時,因爲他周圍most likely都是你這樣的人,所以我也覺得他該這麼幹。

s********e
发帖数: 340
10
楼主说是用Java开发,自定义一个Error类,里面两个成员变量,一个是Code,一个是
Message。Server直接把Error类对象发给前段,前段Code和Message都有了,这不就两
全其美了吗。这点事有什么难解决的地方?

【在 n******t 的大作中提到】
: 你說的話技術上來說沒道理,因爲兩邊都有error string,所以error code是夠的。
: 同時,因爲他周圍most likely都是你這樣的人,所以我也覺得他該這麼幹。

s*****w
发帖数: 1527
11
你们java就是反人类,弄那么多class神经病

【在 s********e 的大作中提到】
: 楼主说是用Java开发,自定义一个Error类,里面两个成员变量,一个是Code,一个是
: Message。Server直接把Error类对象发给前段,前段Code和Message都有了,这不就两
: 全其美了吗。这点事有什么难解决的地方?

o********s
发帖数: 971
12
这么做利弊都很明显。
这个是比较老式的处理方法。优点是简洁许多,而且方便globalization 。http
response 就是这个做法。
现在的趋势是一个API大家用,你不能期望所有API 用户都用你的code repo。所以你就
没办法采用这个模式了。
所以一般建议发string
s*****w
发帖数: 1527
13
我们组的情况是,这个frontend backend都是自己组的,别的组不会用。
但是本组一大堆写java的老印。

【在 o********s 的大作中提到】
: 这么做利弊都很明显。
: 这个是比较老式的处理方法。优点是简洁许多,而且方便globalization 。http
: response 就是这个做法。
: 现在的趋势是一个API大家用,你不能期望所有API 用户都用你的code repo。所以你就
: 没办法采用这个模式了。
: 所以一般建议发string

l********n
发帖数: 490
14
前端是怎样access error_message_strings文件的?
n******t
发帖数: 4406
15
這個和語言沒有任何關係。debug和錯誤處理應該分離,這是一個系統設計的基本原則。
again,和成天只能數loc的人說是對牛彈琴。

【在 s********e 的大作中提到】
: 楼主说是用Java开发,自定义一个Error类,里面两个成员变量,一个是Code,一个是
: Message。Server直接把Error类对象发给前段,前段Code和Message都有了,这不就两
: 全其美了吗。这点事有什么难解决的地方?

y********a
发帖数: 1
16
哪来的傻逼台巴岛蛙,滚回井里去

【在 n******t 的大作中提到】
: 你說的話技術上來說沒道理,因爲兩邊都有error string,所以error code是夠的。
: 同時,因爲他周圍most likely都是你這樣的人,所以我也覺得他該這麼幹。

m*****n
发帖数: 3575
17
C++的规矩太老套啦
非要把每个错误都弄一个错误码,新错误还要更新错误码词典。
我觉得前后端最重要的是沟通顺畅,发错误消息没什么错。

則。again,和成天只能數loc的人說是對牛彈琴。

【在 n******t 的大作中提到】
: 這個和語言沒有任何關係。debug和錯誤處理應該分離,這是一個系統設計的基本原則。
: again,和成天只能數loc的人說是對牛彈琴。

w*****g
发帖数: 4298
18
Backend发localized string也可以的,支持web, mobile,
s*****w
发帖数: 1527
19
both backend/frontend build can pull a public folder

【在 l********n 的大作中提到】
: 前端是怎样access error_message_strings文件的?
n******t
发帖数: 4406
20
不要急,對着個網上的人爆粗跳腳只能顯示你生活壓力大不愉快而已。
我剛才說了,這件事情不是技術問題。如果要求來自平級,別惹事,這就麼幹完事。如
果下級,按正確做法幹。
當然技術上面對的還是要講,否則如果還想以後當管理崗,還是要知道怎麼做的。

【在 y********a 的大作中提到】
: 哪来的傻逼台巴岛蛙,滚回井里去
n******t
发帖数: 4406
21
爲什麼你們總覺得這事情和語言有關係?這是設計原則, 和語言沒有關係。

【在 m*****n 的大作中提到】
: C++的规矩太老套啦
: 非要把每个错误都弄一个错误码,新错误还要更新错误码词典。
: 我觉得前后端最重要的是沟通顺畅,发错误消息没什么错。
:
: 則。again,和成天只能數loc的人說是對牛彈琴。

y********a
发帖数: 1
22
自以为是的岛蛙一个。现实中这样不知深浅的岛蛙早被我捏死好几只了

【在 n******t 的大作中提到】
: 不要急,對着個網上的人爆粗跳腳只能顯示你生活壓力大不愉快而已。
: 我剛才說了,這件事情不是技術問題。如果要求來自平級,別惹事,這就麼幹完事。如
: 果下級,按正確做法幹。
: 當然技術上面對的還是要講,否則如果還想以後當管理崗,還是要知道怎麼做的。

n******t
发帖数: 4406
23
同學,我們都知道現實生活中你這樣的人即使高你一級叫你幹啥就得幹啥,在網上撂狠
話是沒用的。你想想你你這麼一個entry level的dev,能捏死誰吧?
就是幹點打雜的活,別太在意了。好好討論技術,要不就是說人事,講人話也行。

【在 y********a 的大作中提到】
: 自以为是的岛蛙一个。现实中这样不知深浅的岛蛙早被我捏死好几只了
m*****n
发帖数: 3575
24
老套的C和C++受制于强类型没有办法才只发错误码。到现在大家对错误码的意见依然非
常大。类似于Windows的错误码,只有微软自己的人懂。
既然是做Web系统,不是那么硬件消耗大的,理所当然把这层错误码脱掉,直接发错误
信息。
就你现在编译任何一个,或者解释运行任何一个语言,出错只给错误码么?如果遇到这
种语言你不跳脚?同理可用于前端接后端的错误码。

【在 n******t 的大作中提到】
: 爲什麼你們總覺得這事情和語言有關係?這是設計原則, 和語言沒有關係。
p*a
发帖数: 592
25
属实,发个错误消息就行了,狗屁错误码没人用,而且如果错误消息和错误码不匹配怎
么办,你验证吗?你说可以从同一个repo取消息和错误码,但是如果大家不在一个
branch怎么办?

【在 m*****n 的大作中提到】
: C++的规矩太老套啦
: 非要把每个错误都弄一个错误码,新错误还要更新错误码词典。
: 我觉得前后端最重要的是沟通顺畅,发错误消息没什么错。
:
: 則。again,和成天只能數loc的人說是對牛彈琴。

n******t
发帖数: 4406
26
我先問你一個問題,一個編譯器作爲一個軟件來說他的功能是什麼?debug編譯器指的
又是什麼?

【在 m*****n 的大作中提到】
: 老套的C和C++受制于强类型没有办法才只发错误码。到现在大家对错误码的意见依然非
: 常大。类似于Windows的错误码,只有微软自己的人懂。
: 既然是做Web系统,不是那么硬件消耗大的,理所当然把这层错误码脱掉,直接发错误
: 信息。
: 就你现在编译任何一个,或者解释运行任何一个语言,出错只给错误码么?如果遇到这
: 种语言你不跳脚?同理可用于前端接后端的错误码。

s*****w
发帖数: 1527
27
error code can be bitmap, 这样几个error code可以一次送回UI,详细不说,但的确
是我们的use case.

【在 m*****n 的大作中提到】
: 老套的C和C++受制于强类型没有办法才只发错误码。到现在大家对错误码的意见依然非
: 常大。类似于Windows的错误码,只有微软自己的人懂。
: 既然是做Web系统,不是那么硬件消耗大的,理所当然把这层错误码脱掉,直接发错误
: 信息。
: 就你现在编译任何一个,或者解释运行任何一个语言,出错只给错误码么?如果遇到这
: 种语言你不跳脚?同理可用于前端接后端的错误码。

s*****w
发帖数: 1527
28
"如果大家不在一个branch怎么办"
你要自己的build都做不好,那还能怪谁?
如果是那样,api call一样会出问题,因为api的parameters可以变动,引发前后端的
不协调。

【在 p*a 的大作中提到】
: 属实,发个错误消息就行了,狗屁错误码没人用,而且如果错误消息和错误码不匹配怎
: 么办,你验证吗?你说可以从同一个repo取消息和错误码,但是如果大家不在一个
: branch怎么办?

m*****n
发帖数: 3575
29
反正你可以抗拒;
但在对方眼里你就是为了偷懒而强词夺理。
你说的惯例,在你看来是天经地义,在对方眼里是陈规陋习。

【在 s*****w 的大作中提到】
: error code can be bitmap, 这样几个error code可以一次送回UI,详细不说,但的确
: 是我们的use case.

m*****n
发帖数: 3575
30
那后端的功能是什么?
如果你认为编译器的功能就是服务程序员,
那人家认为后端的功能就是服务前端,有什么不合理吗?
在我看来只写错误码不给错误消息,就相当于厨师做好饭,在窗口喊,好了,来拿!
人家当然有理由去抱怨你不给服务。
当然,如果这个饭店几乎只有厨师,可以摆这个架子。

【在 n******t 的大作中提到】
: 我先問你一個問題,一個編譯器作爲一個軟件來說他的功能是什麼?debug編譯器指的
: 又是什麼?

n******t
发帖数: 4406
31
所以你現在知道你之前的類比錯了?
"就你现在编译任何一个,或者解释运行任何一个语言,出错只给错误码么?如果遇到这
你顯然在這裏混淆了編譯器的調試(也就是編譯器如果不work的出錯信息),和給程序
員的出錯信息(在這個情況下,其實是編譯器的功能)這兩件事。腦子不想清楚,啥事
情都幹不好。寫程序也一樣。
後端的功能是服務前端,但是卻不是服務前端程序員,但是debug功能的確需要expose
給程序員。
所以errcode是必須要有的,因爲前端程序只知道errcode,不懂什麼errmsg。同時因爲
需要保持一致和維護err code和errmsg的infomation,通信的時候應該只發code,而讓
前後端用errcode->errmsg的library,在debug的時候顯示出錯信息。
但是這麼一個簡單的事情,一般人已經各種不懂了,而且還紛紛覺得自己牛逼,所以我
告訴他了,把msg寫出去完事,早日升到manager再說。
指的
s*****w
发帖数: 1527
32
java除了产生一大堆垃圾程序还能干什么?
我在这个组3年了,java程序的api tests 如果偶尔有一天全pass了,全组一片沸腾,
然后再继续天天出错。。。

【在 m*****n 的大作中提到】
: 反正你可以抗拒;
: 但在对方眼里你就是为了偷懒而强词夺理。
: 你说的惯例,在你看来是天经地义,在对方眼里是陈规陋习。

m*****n
发帖数: 3575
33
Explicit is better than Implicit.
—— Guido Van Rossum

expose給程序員。
爲需要保持一致和維護err code和errmsg的infomation,通信的時候應該只發code,而
讓前後端用errcode->errmsg的library,在debug的時候顯示出錯信息。

【在 n******t 的大作中提到】
: 所以你現在知道你之前的類比錯了?
: "就你现在编译任何一个,或者解释运行任何一个语言,出错只给错误码么?如果遇到这
: 你顯然在這裏混淆了編譯器的調試(也就是編譯器如果不work的出錯信息),和給程序
: 員的出錯信息(在這個情況下,其實是編譯器的功能)這兩件事。腦子不想清楚,啥事
: 情都幹不好。寫程序也一樣。
: 後端的功能是服務前端,但是卻不是服務前端程序員,但是debug功能的確需要expose
: 給程序員。
: 所以errcode是必須要有的,因爲前端程序只知道errcode,不懂什麼errmsg。同時因爲
: 需要保持一致和維護err code和errmsg的infomation,通信的時候應該只發code,而讓
: 前後端用errcode->errmsg的library,在debug的時候顯示出錯信息。

n******t
发帖数: 4406
34
平常上班瞎扯蛋的事情,別帶這邊來,我沒興趣。

【在 m*****n 的大作中提到】
: Explicit is better than Implicit.
: —— Guido Van Rossum
:
: expose給程序員。
: 爲需要保持一致和維護err code和errmsg的infomation,通信的時候應該只發code,而
: 讓前後端用errcode->errmsg的library,在debug的時候顯示出錯信息。

md
发帖数: 38
35
你大概说的是Java的stack trace。 这才是Java比C++最强大的地方。
错误码和错误信息最大的问题是标准化,操蛋的错误信息会说出现这个问题要么是情况
A,要么是情况B,到底啥问题你自己猜。错误码做得最好的是Oracle DB,但他家的标
准化是花了大量精力的。
一个更好的Practice是后端产生错误码/错误信息时,产生一个UUID,一并发到前端,
在后端LOG这个UUID,同时把Java的Exception包括所有的Stack trace LOG下来。
Debug时只要在后端查找这个关联UUID,就能定位到哪个类哪条语句出错,至于为啥出
错,就看程序员的功力和对代码的熟悉程度。

【在 s*****w 的大作中提到】
: java除了产生一大堆垃圾程序还能干什么?
: 我在这个组3年了,java程序的api tests 如果偶尔有一天全pass了,全组一片沸腾,
: 然后再继续天天出错。。。

a*******9
发帖数: 239
36
ErrorCode 是professional行为。现在80%的程序都是business driven,属于用过即扔
或永远改进型,代码就像个垃圾堆,钱是赚到了,但毫无美感。
Type column是string,这种设计很多年前就充斥在各种设计里, 想象一下代码里有多
少等于(=)不等于(!=)的比较,如果你的API有万级、10万级的并发,发不发
String message这种东西就很值得讨论了,
不过现在已没人在意这些了,写几个表,程序能run, 人人都认为自己是最好的
programmer.

repo

【在 s*****w 的大作中提到】
: 我们组的要求是web backend 把error message string 发给web front end。
: 对此我非常反感,我认为只发error code就可以。
: backend code and frontend code共享一个error_message_strings文件,因为2个repo
: 共享一个文件用来build,不会有不磨合的地方。
: 大家请批评指教。

n***s
发帖数: 551
37

说得太到位了。

【在 a*******9 的大作中提到】
: ErrorCode 是professional行为。现在80%的程序都是business driven,属于用过即扔
: 或永远改进型,代码就像个垃圾堆,钱是赚到了,但毫无美感。
: Type column是string,这种设计很多年前就充斥在各种设计里, 想象一下代码里有多
: 少等于(=)不等于(!=)的比较,如果你的API有万级、10万级的并发,发不发
: String message这种东西就很值得讨论了,
: 不过现在已没人在意这些了,写几个表,程序能run, 人人都认为自己是最好的
: programmer.
:
: repo

o********s
发帖数: 971
38
这里面其实是有政治因素的。
打个比方,如果有一天有个坏人偷偷说 (not in front you, for example, when
talking about your promotion with your director)
you developed a service which cannot be easily shared with other teams, not
extensible, and not upgradeable.
你该如何呢?
亲身经历哈
m*****n
发帖数: 3575
39
我说了他不听。
老中的毛病是喜欢倚老卖老,对上级各种执拗,活该搞不过印度人。

not

【在 o********s 的大作中提到】
: 这里面其实是有政治因素的。
: 打个比方,如果有一天有个坏人偷偷说 (not in front you, for example, when
: talking about your promotion with your director)
: you developed a service which cannot be easily shared with other teams, not
: extensible, and not upgradeable.
: 你该如何呢?
: 亲身经历哈

t*****n
发帖数: 2578
40
只发错误码是可以的。错误码是必须的。
但是有些情况最好连错误消息一起发过去。
比如说你开发出新版本,back end change了,加了新的错误信息。
client端还没有收到新的错误信息文件,这些新的信息就显示不了。特别是当client端
是mobile app,用户很可能还用的旧版没有更新。
s*****w
发帖数: 1527
41
backend server可以有restful api versioning,
如果前端没改,那么是跟旧的后端talk

【在 t*****n 的大作中提到】
: 只发错误码是可以的。错误码是必须的。
: 但是有些情况最好连错误消息一起发过去。
: 比如说你开发出新版本,back end change了,加了新的错误信息。
: client端还没有收到新的错误信息文件,这些新的信息就显示不了。特别是当client端
: 是mobile app,用户很可能还用的旧版没有更新。

1 (共1页)
进入Programming版参与讨论