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

11368879-8a51b91a38dd9dc5

春天经常犯的十个错误,你踩到了这个坑吗?

1.错误一:过分关注底层

我们正在解决这个常见的错误,因为“非创造”综合症在软件开发领域非常普遍。症状包括经常重写一些常见代码,许多开发人员都有这种症状。

虽然理解特定库的内部结构及其实现在很大程度上是好的和必要的(并且可以是一个很好的学习过程),但作为软件工程师,它不断处理相同的底层实现细节。个人职业发展是有害的。

像Spring这样的抽象框架的存在是有原因的,可以让您从重复的手工工作中解脱出来,并让您专注于更高层次的细节 - 域对象和业务逻辑。

因此,接受抽象。下次遇到特定问题时,首先快速搜索以确定解决问题的库是否已集成到Spring中;现在您可以找到合适的现成解决方案。

例如,一个有用的库,在本文的其余部分中,我将在示例中使用Project Lombok注释。 Lombok用作样板代码生成器,希望懒惰的开发人员在熟悉库时不会遇到问题。例如,让我们看看使用Lombok的“标准Java Bean”是什么样的:

可以想象,上面的代码编译为:

但请注意,如果您计划在IDE中使用Lombok,您很可能需要安装一个插件,可以在插件的Intellij IDEA版本中找到。

2.错误2:内部结构“泄漏”

暴露内部结构永远不是一个好主意,因为它会在服务设计中产生不灵活性,从而促进不良的编码实践。 “泄漏”的内部机制通过使数据库结构可从某些API端点访问来体现。例如,以下POJO(“Plain Old Java Object”)类表示数据库中的表:

11368879-bf149df0ff8b3c3a

春天经常犯的十个错误,你踩到了这个坑吗?

假设有一个端点需要访问TopTalentEntity数据。返回TopTalentEntity实例可能很诱人,但更灵活的解决方案是创建一个表示API端点上的TopTalentEntity数据的新类。

11368879-bbe2d0ad5f0b021b

春天经常犯的十个错误,你踩到了这个坑吗?

这样,对数据库后端进行更改将不需要在服务层进行任何其他更改。考虑在TopTalentEntity中添加一个“密码”字段,将用户密码的哈希值存储在数据库中 - 如果你没有像TopTalentData这样的连接器,忘记更改服务前端会意外暴露一些不必要的秘密信息。

3.错误3:缺乏关注点分离

随着程序规模的增长,代码组织成为一个越来越重要的问题。具有讽刺意味的是,大多数优秀的软件工程原理都开始在规模上崩溃 - 特别是没有太多考虑程序架构设计。开发人员最常犯的错误之一是混淆代码问题,这很容易做到!

通常,打破关注点的分离只是将新功能“倾注”到现有类中。当然,这是一个很好的短期解决方案(初学者需要较少的输入),但无论是在测试期间,维护期间还是两者之间,它都将不可避免地成为未来的问题。考虑以下控制器,它将从数据库返回TopTalentData。

11368879-609e6d521a84e0cc

春天经常犯的十个错误,你踩到了这个坑吗?

起初,这段代码似乎没有特别的问题;它提供了从TopTalentEntity实例中检索的TopTalentData列表。

然而,经过仔细观察,我们可以看到TopTalentController实际上在这里做了一些事情;也就是说,它将请求映射到特定端点,从数据库中检索数据,并将从TopTalentRepository接收的实体转换为另一种格式。 “更清洁”的解决方案是将这些问题分成他们自己的类。它可能看起来像这样:

11368879-d04834cadacfbf10

春天经常犯的十个错误,你踩到了这个坑吗?

这种层次结构的另一个优点是它允许我们通过检查类名来确定函数所在的位置。此外,在测试期间,如果需要,我们可以使用模拟实现轻松替换任何类。

4.错误4:缺少异常处理或处理不当

一致性的主题并不是Spring(或Java)所特有的,但在处理Spring项目时,它仍然是一个需要考虑的重要方面。虽然编码风格可能存在争议(通常在团队内部或整个公司内部达成一致),但拥有通用标准最终会提高生产率。对于多人团队来说尤其如此;一致性允许进行通信而无需花费大量资源进行手工操作,并且不需要对不同类型的职责进行冗长的解释。

考虑一个包含各种配置文件,服务和控制器的Spring项目。在命名时保持语义一致性,您可以创建易于搜索的结构,任何新开发人员都可以以自己的方式管理代码;例如,将Config后缀添加到配置类,服务层以Service结束,并且控制设备以Controller结束。

与一致性主题密切相关,服务器端错误处理值得特别强调。如果你曾经不得不处理写得不好的API的异常响应,你可能知道原因 - 正确解析异常可能是一种痛苦,而且确定这些异常的原因会更加痛苦。

返回“500 Internal Server Error”消息作为API a)。 b)直接将异常的堆栈信息返回给用户。 (实际上,应该不惜一切代价避免这些,因为除了客户的困难之外,它还会暴露您的内部信息。)

例如,常见的错误响应格式可能与此一样长:

11368879-a833e4ca4261a319

春天经常犯的十个错误,你踩到了这个坑吗?

在大多数流行的API中经常遇到这样的事情,并且因为它们可以被轻松和系统地记录,所以结果往往非常好。可以通过向方法提供