前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java程序员从Spring框架中学习到的三种最佳实践

Java程序员从Spring框架中学习到的三种最佳实践

作者头像
程序你好
发布2018-07-20 17:57:00
5050
发布2018-07-20 17:57:00
举报
文章被收录于专栏:程序你好程序你好

毫无疑问,Spring框架是最流行的Java框架之一,通过提供依赖注入和控制反转等特性,可以轻松创建企业级Java应用程序。

但是,老实说,Spring不仅仅是另一个DI和IOC框架。通过提供一个有用的抽象层,它进一步简化了许多Java的api,例如JDBC、JMS、Java Mail等等。它们消除了Java开发人员在执行SQL语句和处理结果集以获得他们想要的Java对象时所面临的大部分困难。

因此,当您学习Spring时,不仅要学习如何使用它,还要学习如何用Java和面向对象方式编写更好的代码。

在这篇文章中,我将分享我在学习Spring过程中发现的一些最佳实践,主要是通过阅读Craig Walls的经典动作书籍《Spring In Action》和我自己在使用Spring过程中的体验。

这本书对我产生了巨大的影响,因为克雷格出色的写作风格,以及他解释Spring每一个概念的方式。如果你还没有读过它,我强烈建议你去读这本书——它完全值得你花费时间和金钱。

无论如何,在不浪费时间的情况下,以下是我学到的三种最佳实践,并建议每一个Java程序员在用Java编写代码时都要注意到这一点并加以应用。

1、Coding for Interfaces 面向接口的编程

这是我第一次读Head first Design Patterns时学到的一个老的OOP指导原则。这个OOP设计原则的主要目的是减少两个类之间的耦合,从而增加灵活性。

Spring严格遵循这个面向对象的指导方针,并且经常公开一个接口来使用关键类,例如创建JdbcOperation接口来利用JdbcTemplate。这种做法可以让不同层之间松散耦合。

另一个很好的例子是缓存接口,它用于提供缓存。所有其他的缓存实现,例如EhCache、ConcurrentMapCache和NoOpCache等,都实现了这个接口。

如果您的代码依赖于缓存接口而不依赖于任何特定的实现,那么您可以切换缓存提供者而不会影响代码的其他部分。

下面是使用集合框架为Java中的接口编写代码的简单示例。如果您仔细观察,在这个示例中,我使用了接口而不是实现来声明Java中的变量、参数和返回方法类型。

代码语言:javascript
复制
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
 * Program to demonstrate coding for interfaces in Java
 * @author WINDOWS 8
 *
 */
public class Hello {
  public static void main(String args[]) {
    // Using interface as variable types
    List<String> rawMessage = Arrays.asList("one", "two", "three");
    List<String> allcaps = toCapitalCase(rawMessage);
    System.out.println(allcaps);
  }
  /**
   * Using Interface as type of argument and return type
   */
  public static List<String> toCapitalCase(List<String> messages) {
    return messages.stream()
                    .map(String::toUpperCase)
                    .collect(Collectors.toList());
  }
}

这种编码风格是灵活的,在将来更容易进行扩展。

2、偏爱unchecked的异常胜过checked异常

如果您已经使用了Spring框架,那么您就会注意到Spring更倾向于不检查的异常,而不是检查过的异常,最好的例子就是Spring JDBC。

Spring有丰富的异常层次结构来描述连接和从数据库检索数据时可以获得的不同错误,但是它们的根是DataAccessException,这是未检查的。

Spring认为,大多数错误都源于在catch块中无法纠正的原因,因此它将捕获异常的决定留给开发人员,而不是像Java那样强制他们进入异常。其结果是更简洁的代码,没有空的catch块——以及更少的try-catch块。

在处理Java中的错误和异常时,这也是最佳实践之一。如果您对这个主题感兴趣,那么您也可以查看我的post 10 Java Exception最佳实践以获得更多建议。

3、使用模板方法设计模式

Spring大量使用模板方法设计模式来简化事情。这方面的一个很好的例子是JdbcTemplate,它在使用JDBC API时省去了很多麻烦。您只需要定义它需要什么,Spring就会处理流程的其余部分。

如果您不知道,模板模式定义了一个流程或算法,在这个过程或算法中,您无法更改流程,但同时,您可以根据需要定制步骤。

例如,在处理JDBC时,可以使用JdbcTemplate来执行查询并获取所需的对象。您只需要提供SQL,它在每种情况下都是不同的,以及映射逻辑将一行从一个表映射到一个对象。

这里有一个很好的图表,很好地解释了模板模式。您可以看到,每个人都有一些共同的任务,但是他们做不同的工作,模板方法很好地捕捉到了这一点。他们所需要做的就是定义他们的工作,他们可以通过定义work()抽象方法来定义他们的工作。

除了JdbcTemplate之外,您还可以在Spring框架的API中找到许多模板方法模式的其他示例,例如JmsTemplate和RestTemplate,它们允许您使用Java应用程序中的REST API。

这就是您可以从Spring中学到的一些Java最佳实践。Spring是一个很棒的框架,其作者是经验丰富的Java开发人员。通过使用Spring以及查看它们的代码、所做的决策以及它们如何设计api,您可以学到很多东西。Spring是开源的,这意味着您可以下载并查看它们的源代码。

我知道Spring是许多这样的最佳实践的集合,有很多东西需要学习,但是我发现这三种方法在Spring中随处可见,这对Spring框架的代码质量产生了巨大的影响。

无论如何,如果您遇到了您从Spring中学到的其他最佳实践,请与我们分享。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、Coding for Interfaces 面向接口的编程
  • 2、偏爱unchecked的异常胜过checked异常
  • 3、使用模板方法设计模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档