Sign in
Sign up
Explore
Enterprise
Education
Search
Help
Terms of use
About Us
Explore
Enterprise
Education
Gitee Premium
Gitee AI
AI teammates
Sign in
Sign up
Fetch the repository succeeded.
Open Source
>
Development Lib
>
Common Toolkit
&&
Donate
Please sign in before you donate.
Cancel
Sign in
Scan WeChat QR to Pay
Cancel
Complete
Prompt
Switch to Alipay.
OK
Cancel
Watch
Unwatch
Watching
Releases Only
Ignoring
4K
Star
24.2K
Fork
8.3K
GVP
chinabugotech
/
hutool
Code
Issues
5
Pull Requests
4
Insights
Pipelines
Service
JavaDoc
Quality Analysis
Jenkins for Gitee
Tencent CloudBase
Tencent Cloud Serverless
悬镜安全
Aliyun SAE
Codeblitz
SBOM
Don’t show this again
Update failed. Please try again later!
Remove this flag
Content Risk Flag
This task is identified by
as the content contains sensitive information such as code security bugs, privacy leaks, etc., so it is only accessible to contributors of this repository.
【6.0.0】重要变更汇总
Done
#I6SC4B
Looly
member
Opened this issue
2023-04-02 23:45
## JDK支持 1. 经过深思熟虑 - JDK 8+ ## 代码变动 1. 包名变更为`org.dromara.hutool` 2. 内部工具类重新整理规整,减少无用模块,工具类归类到对应package中。 3. 被人诟病的http模块做重构,采用门面模式,支持包括HttpUrlConnection、HttpClient4、HttpClient5、OkHttp3等库。 4. 在能力范围之内尽量做性能优化,不跟其他高性能库“攀比”,也欢迎大家提交优化。 5. 相比5.x版本做减法,大部分工作是删掉一些重复代码和无用的重载,使用上可能会增加代码量,但是相比减少了歧义。 ## 设计原则 1. 采用Builder + Util模式重构工具类,XXXUtil只负责封装最常用的方法,有很多自定义选项的工具,不再使用一堆的重载方法,而是使用单独的类完成构建。 - 工具强调的是便捷性,即可应用于大部分场景。 - Builder强调灵活性,可根据使用场景优化,得到更好的性能。 ```java XXX.of(xxx) .setXXX(xxx) .setYYY(yyy) ... .doResult(xxx) ``` 2. 构建一种对象不再使用混乱的`createXXX`、`newXXX`、`ofXXX`等名字,而是统一使用`of`或者`ofXXX`。 3. 工具类命名。 - 按照**类型**命名(名词方式),如`StrUtil`、`ListUtil`等。这种命名的好处是,用户需要什么工具时,只需要知道**我想对什么类型的数据做什么操作**即可,就可以联想到**什么类型的Util中什么操作方法**。 - 按照**作用**命名(动词方式),如`CompareUtil`等。一般是按照**单一职责**原则归类,如不同类型对象共用一些方法,则单独放在一起。 4. 门面模式重度依赖SPI机制,一般有两种创建方式。 - 简单工厂模式,即在一个XXXFactory中即可创建对应实现对象,这个对象称之为`Engine`,这种方式一般在Hutool中定义了Engine接口的情况下,初始化功能都可以在Engine实现类中完成,不需要额外参数,使用简单工厂可创建。 - 工厂方法模式,即每个功能实现,都要有自己的Factory,来创建对应的对象。这种方式一般用于JDK定义的接口或实现对象的创建依赖于参数。 5. 单例对象一般定义为enum类,只有一个元素就是`INSTANCE`。 6. 外部依赖全部使用`<optional>true</optional>`,由用户自行引入和选择版本。这种方式可以保证既不绑架用户强制使用第三方某种库,也可以避免第三方库爆出漏洞而没有即时升级Hutool对用户的影响。Hutool希望始终保持一个**工具**的初心,帮助用户简化和解决问题,而不参与用户选择,就好像你要切菜,给你切菜刀,你要剔骨,给你剔骨刀,但是菜和骨都要你自己买。 ## 文档 1. 确定[vuepress-theme-vdoing](https://doc.xugaoyi.com/)作为文档载体。 2. 文档分为几个部分: - 入门指南,强调工具类的使用 - 最佳实践,强调工具类组合应用,以解决哪类实际问题 - 技术进阶,讨论工具类优化和取舍,即某些工具类为什么这么写。 3. 文档各个模块单独成一个独立文档。
## JDK支持 1. 经过深思熟虑 - JDK 8+ ## 代码变动 1. 包名变更为`org.dromara.hutool` 2. 内部工具类重新整理规整,减少无用模块,工具类归类到对应package中。 3. 被人诟病的http模块做重构,采用门面模式,支持包括HttpUrlConnection、HttpClient4、HttpClient5、OkHttp3等库。 4. 在能力范围之内尽量做性能优化,不跟其他高性能库“攀比”,也欢迎大家提交优化。 5. 相比5.x版本做减法,大部分工作是删掉一些重复代码和无用的重载,使用上可能会增加代码量,但是相比减少了歧义。 ## 设计原则 1. 采用Builder + Util模式重构工具类,XXXUtil只负责封装最常用的方法,有很多自定义选项的工具,不再使用一堆的重载方法,而是使用单独的类完成构建。 - 工具强调的是便捷性,即可应用于大部分场景。 - Builder强调灵活性,可根据使用场景优化,得到更好的性能。 ```java XXX.of(xxx) .setXXX(xxx) .setYYY(yyy) ... .doResult(xxx) ``` 2. 构建一种对象不再使用混乱的`createXXX`、`newXXX`、`ofXXX`等名字,而是统一使用`of`或者`ofXXX`。 3. 工具类命名。 - 按照**类型**命名(名词方式),如`StrUtil`、`ListUtil`等。这种命名的好处是,用户需要什么工具时,只需要知道**我想对什么类型的数据做什么操作**即可,就可以联想到**什么类型的Util中什么操作方法**。 - 按照**作用**命名(动词方式),如`CompareUtil`等。一般是按照**单一职责**原则归类,如不同类型对象共用一些方法,则单独放在一起。 4. 门面模式重度依赖SPI机制,一般有两种创建方式。 - 简单工厂模式,即在一个XXXFactory中即可创建对应实现对象,这个对象称之为`Engine`,这种方式一般在Hutool中定义了Engine接口的情况下,初始化功能都可以在Engine实现类中完成,不需要额外参数,使用简单工厂可创建。 - 工厂方法模式,即每个功能实现,都要有自己的Factory,来创建对应的对象。这种方式一般用于JDK定义的接口或实现对象的创建依赖于参数。 5. 单例对象一般定义为enum类,只有一个元素就是`INSTANCE`。 6. 外部依赖全部使用`<optional>true</optional>`,由用户自行引入和选择版本。这种方式可以保证既不绑架用户强制使用第三方某种库,也可以避免第三方库爆出漏洞而没有即时升级Hutool对用户的影响。Hutool希望始终保持一个**工具**的初心,帮助用户简化和解决问题,而不参与用户选择,就好像你要切菜,给你切菜刀,你要剔骨,给你剔骨刀,但是菜和骨都要你自己买。 ## 文档 1. 确定[vuepress-theme-vdoing](https://doc.xugaoyi.com/)作为文档载体。 2. 文档分为几个部分: - 入门指南,强调工具类的使用 - 最佳实践,强调工具类组合应用,以解决哪类实际问题 - 技术进阶,讨论工具类优化和取舍,即某些工具类为什么这么写。 3. 文档各个模块单独成一个独立文档。
Comments (
378
)
Sign in
to comment
Status
Done
Backlog
Doing
Done
Closed
Assignees
Not set
Looly
loolly_admin
Assignee
Collaborator
+Assign
+Mention
dazer007
dazer007
Assignee
Collaborator
+Assign
+Mention
CherryRum
henan_is_unique_oldletter
Assignee
Collaborator
+Assign
+Mention
Createsequence
CreateSequence
Assignee
Collaborator
+Assign
+Mention
emptypoint
emptypoint
Assignee
Collaborator
+Assign
+Mention
阿超
VampireAchao
Assignee
Collaborator
+Assign
+Mention
Husky
Husky_jzq
Assignee
Collaborator
+Assign
+Mention
lxSkye
lxSkye
Assignee
Collaborator
+Assign
+Mention
Labels
feature
Not set
Label settings
Milestones
No related milestones
No related milestones
Pull Requests
None yet
None yet
Successfully merging a pull request will close this issue.
Branches
No related branch
No related branch
v5-master
v7-dev
v5-dev
v6-dev
Planed to start   -   Planed to end
-
Top level
Not Top
Top Level: High
Top Level: Medium
Top Level: Low
Priority
Not specified
Serious
Main
Secondary
Unimportant
参与者(8)
Java
1
https://gitee.com/chinabugotech/hutool.git
git@gitee.com:chinabugotech/hutool.git
chinabugotech
hutool
hutool
Going to Help Center
Search
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
Comment
Repository Report
Back to the top
Login prompt
This operation requires login to the code cloud account. Please log in before operating.
Go to login
No account. Register