高端响应式模板免费下载

响应式网页设计、开放源代码、永久使用、不限域名、不限使用次数

什么是响应式网页设计?

2024年网页设计错误提示代码(实用18篇)

网页设计错误提示代码 第1篇

看起来功能挺酷炫的,是不是这种方式错误管理要介入一个开发包啊?不需要,你只需要10行代码就搞定,如下:

import ;

public class AppErrorMessages {private static final String BUNDLE_FQN = __;private static final ResourceBundle RESOURCE_BUNDLE = (BUNDLE_FQN, new Locale(_en_, _US_));public static String message(@PropertyKey(resourceBundle = BUNDLE_FQN) String key, Object... params) {if ((key)) {String value = (key);final FormattingTuple tuple = (value, params);return key + _ - _ + ();} else {return (key, params).getMessage();}}}

这样在任何地方如果你要打印错误消息的时候,这样((_APP-100-400_,_xxx_));就可以。如果你还有想法和log进行一下Wrapper,如 (_APP-100-400_,_xxx_); ,也没有问题,样例代码如下:

public class ErrorCodeLogger implements Logger {private Logger delegate;private static final String BUNDLE_FQN = __;private static final ResourceBundle RESOURCE_BUNDLE = (BUNDLE_FQN, new Locale(_en_, _US_));

public ErrorCodeLogger(Logger delegate) { = delegate;}

@Overridepublic void trace(@PropertyKey(resourceBundle = BUNDLE_FQN) String msg) {((msg));}}

接下来你就可以在log中直接整合error code,非常便捷。上述代码我已经写好,你参考文章末尾的项目地址即可。

最终的日志输出如下:

提醒:这里我们使用了slf4j的MessageFormatter,主要是方便后续的Slf4j的整合,而且slf4j的MessageFormatter比Java的MessageFormat容错和性能上更好一些。

网页设计错误提示代码 第2篇

一个好的网页设计不光只是看起来好看而已,还要是用户友好型的。通常来说,一个干净、简单的网页设计最终会成为一个可用性高的网页设计,因为它在与用户的交互中不会使其产生混淆。当页面上有太多的网站功能和组件时,将会分散网站用户的注意力而失去原本浏览网站的目的。确保每个页面元素都有其目的,然后问自己以下问题:

1.是否真的需要这个设计么?

2.这是什么组件是做什么用,它如何协助用户浏览?

3.如果我突然删除这个组件,大多数人会希望它“回来”吗 ?

4.如何把这些元素和目标、消息和网站的宗旨互相结合?

此外,尽管它可能是一个超酷的新概念或界面设计模式,但你还是要确保对你的用户而言该设计仍然是方便和直观的。人们习惯于通用性的交互模式、网站功能、和网络接口,如果你的设计的确很独特,确保它不是太模糊和晦涩。 要有创意,但还要保持简单。

网页设计错误提示代码 第3篇

用户会有不同的需求,根据不同操作流程调整界面设计。让用户控制数据的呈现方式,让用户控制数据的排序方式

其他排序标准包括:

按字母顺序

按可用性

按分类

按日期

按距离

按热门程度

按价格

按相关性

按大小

让用户控制数据显示的数量,构建用户画像以区分具体操作流程,让用户通过新标签页打开页面

网页设计错误提示代码 第4篇

说完字体后,我们还需要指出使用正确颜色的重要性。例如,黑色文字在白色背景,如果使用高对比度,橙色背景上的红色文字会令你的眼睛感到紧张。

此外,使用一些对特殊形式色盲的用户友好的颜色(检查工具名为Vischeck,可以测试某些类型的色盲)。

有些色彩组合只适合运用在前景色的部分,而不适合做背景色。举个例子来说,深蓝色的文字搭配粉红色的背景与粉红色的文字搭配深蓝色的背景,都是使用两种一样的颜色,但用在不同的部分则影响了它的可读性和阅读的舒适度。重要的是,不仅要使用良好的色彩组合,而且要把它用在页面中的合适元素上。

网页设计错误提示代码 第5篇

一个好的Error Message主要包含三个部分:

Context: 什么导致了错误?发生错误的时候代码想做什么?

The error itself: 到底是什么导致了失败?具体的原因和当时的数据是什么?

Mitigation: 有什么解决方案来克服这个错误,也可以理解为 Solutions

(, , _Hawaiian pizza_).withLongDescription(_Pineapple on pizza would put your relationship with folks you respect at risk._).withShortDescription(_pineapple on pizza isn't allowed_).because(_the Italian cuisine should be respected_).documentedAt(__).addSolution(s -> (_eat pineapple for desert_)).addSolution(s -> (_stop adding pineapple to pizza_));

这里的Problem理解为Error没有问题,核心主要包括以下几个字段:

context: such as app name, component, status code,使用一个字符串描述当时的上下文,如应用名称 + 组件名称 +具体的错误状态码等,这个由你自己决定,当然JSON字符串也可以,如 {_app_:_uic_, _component_: _login_, _code_:_111_}

description: Long(Short) to describe error 错误描述,有Long和Short两者

because/reason: explain the reason with data 详细解释错误的原因,当然必须包含相应的数据

documentedAt: error link 错误对应的HTTP连接,更详细地介绍该错误

solutions: possible solutions 可能的解决方案,如提示访问者检查email拼写是否正确,短信的Pass Code是否输入正确等。

有了这些具体的字段后,我们理解起来就方便多啦。

网页设计错误提示代码 第6篇

学习如何通过选择正确的格式,来优化网页图片,并确保文件大小在可行的范围你是足够小的。虽然现在人们已经都在使用宽带,但仍然有人是拨号上网。此外,虽然移动装置技术的普及,但移动装置却不一定支持像宽频一样的速度,图片文件的大小可能还是会延长网页的加载时间,有可能把用户赶走的。

这里有个选择适合的文件格式的技巧:如果图片是单色,那最好保存成PNG或者GIF格式;如果是连续性的色调(如照片)则最好保存成 JPG格式。

有很多的工具可以帮助你进一步优化你的图片,降低他们的文件大小。可以参考这个工具列表来帮助优化你的图片。尽量把图片数量减到最低,并且灵活使用图片,并且尽可能地减小文件大小。如此一来,将可以大大的减少页面的读取时间和改善网页的性能。

网页设计错误提示代码 第7篇

不少错误码设计中会添加错误级别,如 RS-001-404-9 这样,最后一位表示错误的严重级别。这样做没有问题,但是也要考虑现实因素,如下:

错误的级别会动态调整的:如随着时空的变化,之前非常严重的错误级别,现在并不那么严重啦。如果资源找不到可能之前非常严重,但是现在添加了备份方案,可以从备份服务器中再查找一次,所以这个错误出现在主服务上可能现在就不是那么严重啦。

不同团队对错误级别的认知不一样:如OSS-404在OSS团队的data server上找不到,元信息都是有的,结果在data server上没有找到对应的数据,这个是非常严重的错误。雷卷在业务团队,如负责Serverless Jamstack,其中的一个文件缺失,如html, css, image,可能并不是一个大问题,等一会重试下,不行就再上传一下。我想表达的是同样的错误,在不同团队中的重要性并不一样。

如果将错误的基本固化到error code中,这个后续你就没法调整啦,你如果调整了错误级别,那就是可能就是另外一个错误码,给统计和理解都会造成问题。我个人是建议错误码中不要包括严重级别这些信息,而是通过外围的文档和描述进行说明,当然你也可以通过诸如 , 来确定错误的级别。

网页设计错误提示代码 第8篇

由于IntelliJ IDEA并不支持动态的properties文件名称,如果你用动态的properties文件名称,就不能进行代码提示,查找等功能也都不能使用,所以必须是这种 @PropertyKey(resourceBundle = BUNDLE_FQN) 静态的properties文件名方式。就一个Java类,你就受累Copy一下这个Java类,毕竟是一次性的工作,当然你想个性化调整代码也更方便,如和Log4j 或自定也的logging框架整合也简单些。日志是项目最基本的需求,所以你创建的项目的时候,就把Error Code对应的代码添加到项目模板中,这样项目创建后就自动包含logging和error code的功能。

网页设计错误提示代码 第9篇

虽然有成千上万的字体,但你真的能用的只是一小部分(至少要等到主要的浏览器完全支持CSS3)。 所以坚持使用网页安全字体。如果你不喜欢网页安全字体,可以考虑利用sIFR或Cufon逐步增强的网页设计。保持字体的一致性,确认标题和段落的内容看起来有所不同。使用空白、调整行高、字体大小和字母间距属性,使用户轻松愉快地阅读和扫描内容。

也许一个网页设计师常常犯的错误就是使用不对的字体大小。因为我们想尽可能的将内容都塞在一个网页中呈现,所以我们有时设置字体大小而让用户感觉到不舒服。如果可能的话,尽量保持字体大小12像素以上,特别是对段落内容。虽然很多没有遇到因为字体太小而造成阅读上的困难,但是想想老人家、近视眼和其他类似视觉障碍的族群吧。

网页设计错误提示代码 第10篇

一个网站最重要的部分就是整个网站的导航。没有它,无论在哪个页面中,用户都会发生卡在这个页面离不开的状况。有了这明显的实际方向,我们将讨论一些建构网站导航时重要的点。

首先,在网站的导航结构上,投入足够的时间和很多规划是非常重要的。虽然这是常识,但仍然有很多设计师想当然地设计网站导航。摆放位置、风格、所用技术(javascript或CSS)、可用性和网页易读性,这些是你制作导航设计时需要考虑的。在没有CSS的状况下,你的导航设计应该也是可用的,这是基于文字基础的浏览器相容性。你可以尽量去嘲笑文字基础的浏览器,但它们在很多的移动设备上还是流行的。也许更为重要的是,对屏幕用户来说(的情况下),没有CSS的导航功能照样可用访问。在没有客户端技术情况下(如JavaScript或Flash),导航功能应该容易进入和使用的。用户可能因安全性或公司政策而没有开启或安装。

所以,制定一个导航系统可以放置的良好位置是必须的,例如放在一个显眼可见的地方。一个好的导航功能,只要网页载入就出现,而不需要鼠标再向下滚动。这是为什么页面要保持干净和简单的重要作用,一个复杂且非常规的设计可能会让用户困惑。哪怕只有一瞬间,用户也必定不会纳闷:“网站导航在哪里?”

最后,对网站建立阶层结构,多层次的管理。确保它在父层与子层之间易于导航。此外,不管在哪一个网页当中,也应该能很容易到达高层的页面(例如网站首页)。最主要的目标就是你的网站导航,尽可能减少操作(动作),努力而让用户到达他想要浏览的内容。

网页设计错误提示代码 第11篇

各种错误处理上都建议使用错误码,错误码有非常多的优势:唯一性、搜索/统计更方便等,所以我们还是要讨论一下错误码的设计。网上也有不少错误码的设计规范,当然这篇文章也少不了重复造轮子,该设计提供给大家参考,大家自行判断啊,当然也非常欢迎留言指正。

一个错误码通常包含三个部分:

System/App short name: 系统或者应用的名称,如 RST, OSS等。如果你熟悉Jira的话,基本也是这个规范,Java程序员应该都知道HHH和SPR代表什么吧?

Component short name or code: 系统内部的组件名称或者编码,如LOGIN, AUDIT,001 这些都可以,方便更快地定位错误。

Status code: 错误的状态码,这个是一个三位数字的状态码,如200,404,500,主要是借鉴自 HTTP Status Code,毕竟绝大多数开发者都了解HTTP状态码,我们没有必要再重新设计。

有了上述的规范后,让我们看一下典型的错误编码长什么样子:

OSS-001-404: 你应该知道是OSS的某一组件报告资源没有找到吧

RST-002-500:这个是一个组件的内部错误

UIC-LOGIN-404:这个应该是会员登录时查找不到指定的账号

我们采用应用名缩写, 组件名或者编码, 状态值,然后以中划线连接起来。中划线比较方便阅读,下划线有时候在显示的时候理解为空格。同时有了标准的HTTP Status Code支持,不用参考文档,你都能猜一个八九不离十。错误码设计千万不要太复杂,试图将所有的信息都添加进去,当然信息非常全,但是也增加了开发者理解和使用成本,这个可能要做一个取舍,当然我也不是说目前这种一键三连(打赏、点赞加转发)的结构就最合理,你也可以自行调整。有没有做心里研究的同学来说一下,这种三部分组成的方式,是不是最符合人们的认知习惯?如果超过三部分,如4和5,人们能记住和使用的概率是不是就下降的非常多?

还记得前面说的error的context吗?这里error code其实就是启动context的作用,如 UIC-LOGIN-404,错误发生在哪里?错误码帮你定位啦。当时代码想干什么?错误码也说明啦。虽然说错误码不能完全代表错误的上下文,但是其承载的信息已经足够我们帮我们了解当时的上下文啦,所以这里error code就是起着context的作用。目前看来至少error code要比 (, , _Hawaiian pizza_) 中的Hawaiian pizza 作为context更具有说服力,也规范一些。

网页设计错误提示代码 第12篇

错误码设计完毕后,我们还不能用错误码+简短消息方式输出错误,不然就出现类似 ORA-00942: table or view does not exist这种情况,你一定会吐槽:_你为何不告诉哪个表或者view?_。所以我们还需要设计一个message格式,能够将错误的context, description, reason, document link, solutions全部包含进来,这样对开发者会比较友好。这里我拟定了一个Message的规范,当然大家可以发表自己的意见啊,如下:

long description(short desc): because/reason --- document link -- solutions

解释一下:

错误的长描述直接书写,短描述使用括弧进行包含。这种写法在合同中非常常见,如阿里云计算有限公司(阿里云) ,你签署劳动合同时,公司的称谓基本也是全名(代称) 这种方式。好多同学会在错误日志中书写登录失败,但是登录系统中有多种登录方式,所以远不如Failed to log in with email and password(Login Failed), Failed to log in with phone and passcode(Login Failed), Failed to log in with oauth2(Login Failed) 更清晰。

错误具体原因: 接下来是冒号,然后书写详细的原因,如 email user@ not found ,gender field is not allowed in 一定要包含具体的数据信息,包括输入的,还是和劳动合同一样,抬头之后就是你的具体岗位和薪水,虽然合同是格式化的,但是每一个人具体的岗位和薪水是不同的,这些参数都是从外部获取的。此处有安全同学发问,如何数据脱敏?这个是另外的问题,大多数开发者应该了解如何进行mask,这里我们就跳过。当出现劳动纠纷这个错误时,具体原因中的数据,如岗位和薪水等,这样劳动仲裁局就可以快速定位并解决该_错误_。

document link: 接下来我们使用三种划线---进行分隔,输入对应的error link。三划线作为分隔符在很多的场景中多有使用,如mdx, yaml等,大家不会太陌生。如果没有link那就忽略就可以。

solutions:自然的文本表述即可,能说明清楚就可以,也是放在三中划线后。

看一个具体的消息格式例子:

APP-100-400=Failed to log in system with email and password(Email login failed): can not find account with email {} --- please refer --- Solutions: 1. check your email 2. check your password

上述的APP-100-400的错误码对应的描述基本覆盖到jdoctor中需要的信息,可以说对一个错误的描述应该非常全啦,而且有一定的格式,也方便后续的日志分析。

网页设计错误提示代码 第13篇

原文和Reddit上相关的讨论也进行了一些整理和说明:

内外有别:如内部开发者的错误中可能会包括服务器的具体信息,当然给最终消费者,如平台的FaaS开发者,可能就不能输出这样的信息,有一定的安全风险。

小心在错误中暴露敏感数据:输出到错误日志的数据一定要进行mask,当然也不要影响你定位错误,这个要看具体的场景。

不要将错误消息作为 API 契约:在API的场景中,响应错误有两种方式:根据错误码做响应,如REST API;另外一种是根据消息做出响应,如GraphQL,所以这个你自行选择。

Error Code的一致性:错误消息会输出给不同的消费者,如REST API,界面等,可能错误的提示消息有所不同,如国际化、脱敏等,但是最好都是相同的error code,也就是front end + backend 共享相同的error code,方便定位错误和统计。

采用error code + 基于properties文件存储error message,这个设计其实就是一个综合的取舍。如果IDEA不能很好地支持properties文件,你看到一个Error Code,不能直接定位到错误的消息,相反还需要跳转来跳转去找对应的消息,那么Enum + POJO可能就是好的选择。此外error code的设计也非常偏向http status code方案,这个也是主要基于大家对HTTP都非常熟悉,基本上就能猜出大概的意思,相反随机编码的数字就没有这方法的优势,要去error code中心再去查找一下,无形中也是浪费开发人员的时间。

Demo地址:

[1][2][3]

云栖号的伙伴群开启了,欢迎大家入群聊起来!

大家想看什么内容,我们可以一起聊聊~

网页设计错误提示代码 第14篇

就Java和IntelliJ IDEA的支持来看,目前的配合还是比较好的,如i18n,维护成本等,而且这些也可以提交到中心仓库进行Error Code集中管理,如果是Java Enum+POJO对i18n和集中管理都比较麻烦,而且代码量也比较大,你从上述的jdoctor的problem builder的就可以看出。当然在不同的语言中也未必是绝对的,如在Rust中,由于enum的特性比较丰富,所以在Rust下使用enum来实现error code可能是比较好的选择。

#[derive(Debug)]enum ErrorMessages {AppLogin404 {email: String,},AppLogin405(String),}

impl fmt::Display for ErrorMessages {fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {// extract enum name parameter// output message from java-propertieswrite!(f, _{:?}_, self)}}

网页设计错误提示代码 第15篇

错误码的设计要遵循很多原则,接下来我会介绍一步步介绍为什么要遵循这些原则以及中间会遇到的问题。

作为程序员,你有没有这样的经验:

运维同学又屁颠屁颠跑来求助:“用户不能下单了!”

“报什么错?”

“系统异常!”

无论作为用户还是程序员,一见到“系统异常”四个大字,整个人都不好了。它除了告诉我系统出问题了,没有任何有价值的信息。这又是陪运维人员加班的一天。

喜欢将对外错误信息一股脑写成“系统异常”的人,一般处于以下几种原因:

刚入行的小白,尚未深入体验程序员的苦难生活。

“敏感信息”信徒,对他们来说,任何系统错误信息都属于敏感信息,需要“包装”一下。

高敏行业,公司强制要求。

该代码的意思是所有 throws 都被捕获转成“系统异常”!关键还连个日志都不记录!

后续的开发人员为了方便定位错误,便在业务层代码里面各种 log、打断点,业务代码惨不忍睹。

上述代码无法判断出现异常的位置在哪里,于是为了解决这个问题,某些程序员给系统异常后面带了个 flag 标识。

这个flag可以代表异常出现在日志中的位置,当出现问题时,根据标识就能快速定位日志来排查问题了,对于有完善日志系统(如 ELK)的项目来说已经大大改善了程序员们的生存状况。

但上面的代码有什么问题呢?

试想某支付逻辑有如下代码:

余额不足,很常见的场景,但用户看到的是这样的提示:“系统异常(1877618)”。

如今显示“系统异常”的做法已经不多了,大多都决定用错误码了,现在更可能遇到的是这样的代码:

业务层代码:

这种错误处理原则是通过错误码统一整个项目的 code 和 message,开发人员不能在程序中自己定义错误描述。

这已经非常好了,进一步完善了错误的跟踪和语义,但还有一些细节需要注意。

统一错误码描述的方案担心的是:如果让开发人员自己在代码里面定义错误描述,会导致每个人的描述可能都不一样,而且有可能会导致敏感信息泄露。

虽然相对于“系统异常”,“错误码”们已经有了长足的进步,大家终于知道系统发生了什么样的错误。

但是用户购买 500 元商品时提示“卡余额不足”,但更好的提示应该是“卡余额不足,当前可用余额 ”。

当根据 userId 查不到用户信息时,应该提示“用户不存在”,但不能保证开发人员因不想定义新 code 而直接使用 404(未找到资源)。

统一错误码提示信息的问题是其文字提示过于笼统,导致在某些错误场景下丢失重要价值信息(进而导致问题排查上的困难,问题迟迟得不到解决),另一些场景下则带来不好的用户体验。

对于开发人员来说,它会带来两种效果:

一些开发人员不想新定义一大堆错误码,于是将就着使用现有的错误码,导致错误提示不伦不类。

另外一些开发人员则倾向于定义大量的错误码,几乎每处异常都定义一个新错误码(理由是每处异常文字提示都不一样),最终导致错误码失控。

改进其实很简单,就是允许异常类传入自定义描述:

但是你会惊奇地发现,大部分地方仍旧是这样调的:

当然,人都是有惰性的,如果你提供了偷懒的途径,他没有理由不偷懒。

本着中庸之道的原则,错误码更进一步的设计应该是:强制固定 code、自定义 message。

即使你规范设计了自己负责模块的错误码,“错误码”给人第一的印象仍然是:混乱。

因为一套软件系统由不同的人开发完成,系统内部的功能模块互相依赖。尤其是在微服务架构之下,各个团队都有一套自己的“错误码”,甚至在一个团队里面不同的微服务都有自己的一套码值,这些“一套一套”的错误码,各成一派,互不通气。

例如一个接口的业务逻辑可能涉及到数据库、缓存、消息中间件等基础设施及各种第三方应用,每个外部依赖的独立子系统都有一套自成逻辑的错误码。但是对于用户而言,希望能看到一个统一的错误返回机制。

一旦微服务上下游交互涉及到错误码转换的时候,总有一方就开始痛了,因为总有一方要承担兼容转换、令人“恶心”的逻辑。

也有试图在一片混乱中“力挽狂澜”的案例,比如由基础架构组提供统一的错误码管理平台,如果某个系统需要错误码就去该管理平台上去申请。

这个想法固然是好的,但存在一个巨大的问题就是:历史错误码的治理。

而一旦涉及到“历史”问题,推动起来就很难受了,这玩意就属于技术债了。

技术债的优先级,永远是低于业务需求的,而业务需求是源源不断的。通常情况是随着每一次业务需求的落地,之前的技术债就更多一点。

因此,错误码设计要考虑不同系统错误码的转换,并且做好错误码的分类及层次深度上的设计。

错误码所报告异常的第一使用者是人,这里包括使用者(用户)和异常处理者(运营人员、程序员)。

对于用户是人的情况来说,更希望看到错误的描述,而不是一串数字和字母。

细分一下,错误又分为业务异常和系统 bug。

业务异常是指业务流程中的异常场景,如支付时卡余额不足导致无法支付、用券时发现券不符合使用条件、用户执行了某个未授权的操作等。这类异常的触发者是用户自己(而不是系统),信息受众是用户。所以业务异常的信息提示必须注重用户体验,优秀的提示文字至少要做到以下几点:

尊重用户,不要让用户感觉受到冒犯或戏谑(请慎用自认为很“幽默”的话语);

清晰,应包含触发异常的关键信息(如当余额不足时应提示当前余额是多少);

具备指引性,用户看了之后清楚该怎么做;

第二类异常是系统 bug,如接口超时、非预期参数导致程序崩溃、代码逻辑 bug 等。该类异常的触发者是系统(或者说开发系统的程序员),信息受众是程序员。所以 bug 类型异常的信息提示必须对程序员友好,让程序员看到错误提示后能够快速定位到问题的原因、代码所在的位置。

我们说异常,一般就是指 bug 型异常,这类异常占程序员的精力也是最多的,也最值得优化处理机制。bug 型异常具有如下特征:

不可控性。没有程序员会主动去写 bug,但没有哪个系统完全没有 bug。我们无法预知 bug 到底来自哪里、会有什么样的提示信息;

定位困难。当系统提示“余额不足”时,我们很快知道是用户卡没钱了,但当系统提示“参数类型错误”时,我们往往只能一脸懵逼;

可能涉及敏感信息。如 SQL 操作错误时可能会将整个 SQL 语句暴露给外界;

因而优秀的 bug 型异常处理机制应做到:

提示信息对程序员友好,可能意味着对用户并不友好,一些程序员正是据此以“用户体验”之名将 bug 提示信息转换成了“对用户友好”的提示文案,结果是所有人看了都云里雾里。

其实,bug 型异常压根不用考虑用户体验。

因为系统出 bug 本身已经是非常糟糕的用户体验了,用户不会因诸如“哎呀,系统开小差了”之类的废话就变得好受些,用户真正关心的是尽快能正常下单。

此时的当务之急是快速修复 bug,所以提示文案的定位功能就非常重要,一段纯技术性的文字,对于用户来说可能是天书,但对于程序员很实用。

然而,这不意味着给到用户端的错误提示就可以为所欲为。如果我们为了方便定位便将整个程序调用栈 alert 出来,虽然可能并不会进一步拉低用户体验,但至少给人的感觉是不专业,而且过多的信息也意味着很容易暴露敏感信息(如程序路径、软件版本、SQL 语句),如果对方是个黑客,你只能自祈多福了。

另外要注重脱敏。大部分框架在数据库操作失败时,其 message 信息中都会包含诸如 SQL 语句之类的敏感信息,这类信息不可暴露到外面。

综上,我们可以采取文案+日志的策略,文案中包含关键信息,日志中包含详细信息(包括调用栈信息)。

大部分的 DB 库抛出的异常都有共同基类(如 DBException),我们可以针对这类异常做脱敏处理。

这也告诉我们另一件事:当我们自己开发公共库时,最好为该库定义一个统一基类异常,这样当使用者想要特殊处理该库抛出的所有异常时不至于狗咬刺猬无处下牙了。

另外,有些团队并不想记录业务型异常的调用栈信息(“卡余额不足”时,调用栈信息并无多大意义)。我们可以在框架层面定义个业务异常基类:BusinessException,异常处理时不记录该类型的调用栈信息。

异常信息的另一个使用者是系统。包括其他服务、前端 js 脚本等。

在错误码没有统一管理的软件系统中,程序员能自由返回错误码和错误信息,有些人喜欢将错误信息作为处理业务逻辑的依据。

但是如果某个程序员哪天心血来潮将“用户不存在”改成“用户信息不存在”,系统就崩了。

后端程序员有时候会给出这样的理由:接口返回的错误码实在是杂乱无章,光“用户不存在”的错误码就有八个,说不定未来还会增加。为“系统稳定性”考虑,最终选择匹配 message。

其实,系统只会也只应该关注错误码。所以和 message 的随意性不同,code 应具备相当的稳定性。

同一个系统,如果A0101 表示“用户不存在”,就绝不应该再用其他值(如 A0201)表示相同的含义。

另外,“code 面向系统”这一特点也要求 code 定义的是某一类异常(而不是某一个异常)。例如“订单创建失败”是一类异常,在业务代码中针对不同的失败原因有不同的 message,但其 code 都是一样的。

然而人类对数字并不敏感,要不同的程序员都保证写 throw new Exception(_A0101_,_用户不存在_),而不是写throw new Exception(_A0201_,_用户不存在_)是不可能的。

所以需要将数字文本化,也就是定义错误码常量:

代码中只能使用错误码常量:

禁止使用字面量。

不过上面这段 throw 并不理想,首先默认类型 Exception 并不具备业务语义,另外开发人员如果硬是用数字字面量谁也没办法。更可取的方式是针对每种类型异常定义单独的异常类,该异常类仅允许传入 message,类内部自行绑定 code:

调用代码:

好的错误码解决的基本问题是“谁的错错在哪?。

或者有更高的要求: 易于记忆和比对(Equals),人们能够脱离文档和系统平台达到线下轻量化地自由沟通的目的。

错误码的输出方式主要分两类:面向日志和面向传递。根据不同的输出方式,需要定义不同的错误码。

面向日志输出

通过错误码可以对日志进行问题排查,快速定位问题。同时,日志中有了错误码之后,就可以通过错误码的分类配置监控大盘。

面向外部传递(常用)

由于系统逻辑会用到很多第三方服务,它们有各成体系的错误码,后端服务之间可以对错误码进行传递,然后进行转义传递给前端。

输出到日志的错误码有两个用途:

对于面向日志的错误码场景需要利用错误码制作分类的业务监控大盘,比如统计应用 A 的功能 B 的错误出现次数。

按照《手册》的建议设计出的面向日志的错误码定义共十三位(十位有意义,三位连接符),并且应该具有如下分类:

当然对于分为四段的错误码同样尤其不好的一面,应用标识和功能域标识需要有专人去管理或者开发一个错误码管理工具,否则时间一长很容易产生定义的混乱形成破窗。

面向外部传递的错误码是为了把域内的错误信息传递出去。

域外系统通过错误码进行后续的动作,或是中断操作,或是记录日志继续执行。

前端通过错误码,给出用户准确的错误提示或者忽略错误进行重试。

根据《手册》给出的错误码定义建议设计出的面向外部传递的错误码共五位,并且有如下分类:

说明:错误产生来源分为 A/B/C,A 表示错误来源于用户,比如参数错误,用户安装版本过低,用户支付超时等问题;B 表示错误来源于当前系统,往往是业务逻辑出错,或程序健壮性差等问题;C 表示错误来源于第三方服务,比如 CDN 服务出错,消息投递超时等问题;四位数字编号从 0001 到 9999,大类之间的步长间距预留 100。

根据《阿里巴巴开发手册》建议,错误码的制定有这些细则

以下是《手册》给出的错误码示例:

因为数字错误码,不便于感性记忆和分类,不容易记住。

在日志中无法确定某串数字是否是错误码,还是某个数值。

纯字母错误码不便于排序,用英语不能准确描述错误。

网页设计错误提示代码 第16篇

Banner设计注意点:Banner有动态和静态两种。在浏览网页的过程中,虽然闪烁的图案会产生瞬间记忆刺激,引起注意,但这种记忆往往为压迫性的,久之易产生负面效应,从而模糊记忆。而稳定的画面不易引发特殊的关注,但如果有良好的界面引导和内容,可产生良性的记忆,持久而牢固。设计要点:Banner的文字不能太多,用一两句话来表达即可;广告语要朗朗上口,可以第一时间的让人捕获表达的重点;图形无须太繁杂,文字尽量使用黑体等粗壮的字体,否则在视觉上很容易被网页其他内容淹没;图形尽量选择颜色数少,能够说明问题的事物;如果选择颜色很复杂的物体,要考虑一下在低颜色数情况下,是否会有明显的色斑;尽量不要使用彩虹色、晕边等复杂的特技图形效果,这样做会大大增加图形所占据的颜色数,增大体积。

网页设计错误提示代码 第17篇

有了错误码和message的规范,接下来我们应该如何保存这些信息呢?如果是Java,是不是要创建对应的ErrorEnum,然后是一些POJO?这里个人建议使用properties文件来保存错误码和message的信息。文件名可以直接为,当然是在某一package下,文件样例如下:

### error messages for your AppAPP-100-400=Failed to log in system with email and password(Email login failed): can not find account with email {0} --- please refer --- Solutions: 1. check your email 2. check your passwordAPP-100-401=Failed to log in system with phone and pass(Phone login failed): can not find account with phone {0} --- please refer --- Solutions: 1. check your phone 2. check your pass code in SMS

为何要选择properties文件来保存error code和message信息,主要有以下几个原因:

国际化支持:Java的同学都知道,如果你的错误消息想调整为中文,创建一个 即可。原文中的建议是Don’t localize error messages,但是考虑到国内大多数程序员未必能用英文表达清楚,所以中文也是可以的。题外话:如果中国的程序员都能用英文清晰地阅读文章和表达自己的思想和观点,我们在计算机方面的水平可能会提升到更高的台阶。

各种语言对properties的文件解析都有支持,不只是Java,其他语言也有,而且properties文件本身也不复杂,所以该properties文件可以给, Rust等其他语言使用,如果是Java enum和POJO基本就不可能啦。

properties文件格式丰富:支持注释,换行符,多行转义等也都没有问题。

最后最关键的是IDE支持非常友好 , 以Java开发者使用的IntelliJ IDEA来说,对Properties文件的支持可以说是到了极致,如下:

error code的自动提示

重构和查找支持:虽然Error Code是字符串,但是也是properties的key,所以rename这个error code,所有引用的地方都会rename。还支持find usage,那些地方引用了该error code等,都非常方便。当然如果Error Code在系统中没有被使用,也会灰色标识。

折叠自动显示功能:当你的代码处于折叠状态时,IDEA直接将message拿过来进行显示,你在code review的时候方便多啦,也便于你理解代码。

直接修改message的值

网页设计错误提示代码 第18篇

文字也是设计的。设计要点:每一行文字的长度最好20到30个中文字(40到60个英文字母);行距与字距已由软件内定。设计时注意段落与段落间空行及首行缩排方式以辅助阅读;标题以H1到H3字号为佳,内文Font size=3到4级为佳;同版面字型最好在三种以内;文字的颜色最好也是三种以内;文字在颜色上要与背景区别;内文的排列向左对齐并与左边界保持适当距离。可以用表格填入文字以达此效果;表格或清单内的字运用相同字型与字体大小,以利辨别。

猜你喜欢

热门内容