跳至主要內容

No Bad Code, Not Bad Code

Java新手和小队长都说好的项目规范及代码审查

攻城狮朋友圈
有关努力和精进的攻城狮精神和技能的分享
如何加入此项目
创业团队的规则和项目支架
Java猿必备书籍
写好高质量代码的约定和规则
小团队创业实践
快速实现业务目标,快速偿还技术债务,安全的面对重构。
C005.23届0609怪

C005.23届0609怪

1.CompanySearchService.java 64-64

gigax 479a5bd2922b52f1b5d0cde70dd0eaacdb8063d7

List<Long> searchLadingId(@NotNull Long companyId);
//
List<Long> searchLadingId(long companyId);

trydofor原创大约 3 分钟技债
C004.23届0525怪

C004.23届0525怪

1.CompanyManageController.java 70-74

gigax 6697d36f75f4ced94545489e61f8c3781ccf5ecd

@RequestMapping("/admin/parcel/company-name.json")
public R<?> searchCompanyName() {
    Map<Long, String> map = companySearchService.searchName(TenantUtil.getTenantable());
    return R.okData(map);
}
// 修改后
@PostMapping("/admin/parcel/company-name.json")
public R<Map<Long, String>> searchCompanyName() {
    final Map<Long, String> map = companySearchService.searchName(TenantUtil.getTenantable());
    return R.okData(map);
}

trydofor原创大约 4 分钟技债
1.不错先生

1.不错先生

不错先生本名叫史麦乐,地道的中国东北程序员,写Java有20余年,150万行之多。 不要惊诧于那坨 N🚫T B💩D的组合头像,它并不属于不屎先生(Mr.NoShit)。 它是一个丧失了审美,还迷信自然数654321的家伙自己PS的。

你听过那个『不要!停!不要停!』的故事么?不错先生有过类似的经历,他的版本是这样的,

  • 不!错!
  • 不要错!
  • 不错!

trydofor原创小于 1 分钟摘要
A.团队规则

A.团队规则

团队规则,通用由行业规范,框架约定,最佳实践等构成,是团队或项目的最高执行法则。 代码审查,以团队约定为基础,在具体条件和场景内,偿还技术债务或改善代码。

代码审查需要持续进行,自我审查,同行审查都可,改良后代码在就近的迭代中测试和发布。 这个过程,不但可以持续改良代码结构,更可以使知识和经验在团队中共享。

A.1.审查和重构的基准

代码审查,通常伴随着重构,通常3-5次审查后,等于或伴随着一次较大的重构。 日拱一卒的审查,一般是方法,类,继承树的内部改良,不应该具有外部破坏性。 而不破不立的重构,经常伴有结构性调整,通常需要回归测试。


trydofor原创大约 3 分钟摘要
B.自学成才

B.自学成才

主动学习,是一种重要能力,它是很多成功现象的本质推动力。 我认同『师傅领进门,修行在个人』,也主张『攻城狮精神』。

B.1.代码怪的等级

想象一下玩游戏时的打怪升级,出现在review中的代码怪也是有等级和经验值。 不同的是代码怪是程序猿生成的,等级和经验值和生成他的程序猿当时的状态有关。

等级的评定其实比较主观,但为了便于理解和度量,主要参考以下方面的,

  • 代码行数 - 累计量,主要指手写代码,非模板或自动生成。
  • 反思点数 - 累计量,每迭代时,提升自己能力的10%算一个点。
  • 方案数量 - 碰到问题时,大脑中能立即验证的可行方案数量。

trydofor原创大约 3 分钟摘要
C.技术债务

C.技术债务

代码怪是找出来的,经验值是打出来的,好代码是改出来的。

练习基础技能好比大厦的打地基,从来没有取巧,唯有夯实。

C.1.命名规则

代码怪以周为单位存放于一个文件序号文件中,如c###.md

  • 一级标题,如yy届mmdd怪,内容可为内容摘要。
  • 二级标题,以Any2Dto插件截取格式为准。

trydofor原创小于 1 分钟摘要
C003.22届0913怪

C003.22届0913怪

1.URLClassPath.java 631-638

java/11.0.2-open 2019-01-18 16:22:01 /java.base/jdk/internal/loader/URLClassPath.java

Resource getResource(final String name, boolean check) {
    final URL url;
    try {
        url = new URL(base, ParseUtil.encodePath(name, false));
    } catch (MalformedURLException e) {
        throw new IllegalArgumentException("name");
    }
    // ....
}

trydofor原创大约 5 分钟技债
C002.22届0818怪

C002.22届0818怪

1.pom.xml 60-63

tail-backend 2022-08-18 18:39:03 /tail-common/pom.xml

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.8</version>
</dependency>

trydofor原创大约 5 分钟技债
A04.副作用和引用透明

A04.副作用和引用透明

A04A.控制函数的副作用

A04B.引用透明

引用透明性 (eferential Transparency)


trydofor原创小于 1 分钟规则健壮副作用