Spring 常犯的十大错误,这坑你踩过吗?


Spring 常犯的十大错误,这坑你踩过吗?

文章插图
 
1. 错误一:太过关注底层
我们正在解决这个常见错误,是因为 “非我所创” 综合症在软件开发领域很是常见 。症状包括经常重写一些常见的代码,很多开发人员都有这种症状 。
虽然理解特定库的内部结构及其实现,在很大程度上是好的并且很有必要的(也可以是一个很好的学习过程),但作为软件工程师,不断地处理相同的底层实现细节对个人的开发生涯是有害的 。
像 Spring 这种抽象框架的存在是有原因的,它将你从重复地手工劳作中解放出来,并允许你专注于更高层次的细节 —— 领域对象和业务逻辑 。
因此,接受抽象 。下次面对特定问题时,首先进行快速搜索,确定解决该问题的库是否已被集成到 Spring 中;现在,你可能找到一个合适的现成解决方案 。
比如,一个很有用的库,在本文的其他部分,我将在示例中使用 Project Lombok 注解 。Lombok 被用作样板代码生成器,希望懒惰的开发人员在熟悉这个库时不会遇到问题 。举个例子,看看使用 Lombok 的 “标准 JAVA Bean” 是什么样子的:
如你所想,上述代码被编译为:
但是,请注意,如果你打算在 IDE 中使用 Lombok,很可能需要安装一个插件,可在 此处 找到 Intellij IDEA 版本的插件 。
2. 错误二:内部结构 “泄露”
公开你的内部结构,从来都不是一个好主意,因为它在服务设计中造成了不灵活性,从而促进了不好的编码实践 。“泄露” 的内部机制表现为使数据库结构可以从某些 API 端点访问 。例如,下面的 POJO(“Plain Old Java Object”)类表示数据库中的一个表:
Spring 常犯的十大错误,这坑你踩过吗?

文章插图
 
假设,存在一个端点,他需要访问 TopTalentEntity 数据 。返回 TopTalentEntity 实例可能很诱人,但更灵活的解决方案是创建一个新的类来表示 API 端点上的 TopTalentEntity 数据 。
Spring 常犯的十大错误,这坑你踩过吗?

文章插图
 
这样,对数据库后端进行更改将不需要在服务层进行任何额外的更改 。考虑下,在TopTalentEntity 中添加一个 “password” 字段来存储数据库中用户密码的 Hash 值 —— 如果没有 TopTalentData 之类的连接器,忘记更改服务前端,将会意外地暴露一些不必要的秘密信息 。
3. 错误三:缺乏关注点分离
随着程序规模的增长,逐渐地,代码组织成为一个越来越重要的问题 。讽刺的是,大多数好的软件工程原则开始在规模上崩溃 —— 特别是在没有太多考虑程序体系结构设计的情况下 。开发人员最常犯的一个错误就是混淆代码关注点,这很容易做到!
通常,打破 关注点分离 的是将新功能简单地 “倒” 在现有类中 。当然,这是一个很好的短期解决方案(对于初学者来说,它需要更少的输入),但它也不可避免地会在将来成为一个问题,无论是在测试期间、维护期间还是介于两者之间 。考虑下下面的控制器,它将从数据库返回 TopTalentData 。
Spring 常犯的十大错误,这坑你踩过吗?

文章插图
 
起初,这段代码似乎没什么特别的问题;它提供了一个从 TopTalentEntity 实例检索出来的TopTalentData 的 List 。
然而,仔细观察下,我们可以看到 TopTalentController 实际上在此做了些事情;也就是说,它将请求映射到特定端点,从数据库检索数据,并将从 TopTalentRepository 接收的实体转换为另一种格式 。一个“更干净” 的解决方案是将这些关注点分离到他们自己的类中 。看起来可能是这个样子的:
Spring 常犯的十大错误,这坑你踩过吗?

文章插图
 
这种层次结构的另一个优点是,它允许我们通过检查类名来确定将功能驻留在何处 。此外,在测试期间,如果需要,我们可以很容易地用模拟实现来替换任何类 。
4. 错误四:缺乏异常处理或处理不当
一致性的主题并非是 Spring(或 Java)所独有的,但仍然是处理 Spring 项目时需要考虑的一个重要方面 。虽然编码风格可能存在争议(通常团队或整个公司内部已达成一致),但拥有一个共同的标准最终会极大地提高生产力 。对多人团队尤为如此;一致性允许交流发生,而不需要花费很多资源在手把手交接上,也不需要就不同类的职责提供冗长的解释 。


推荐阅读