2.1.1 建立领域实体

应用程序的领域实体是它所处理的主题领域 —— 影响应用程序理解的思想和概念。在 Taco Cloud 应用程序中,领域包括 Taco 设计、组成这些设计的成分、客户和客户下的 Taco 订单等对象。图 2.2 显示了这些实体以及它们是如何关联的。

图 2.2 Taco Cloud 相关实体

首先,我们将关注玉米卷配料。在领域中,玉米卷配料是相当简单的对象。每一种都有一个名称和一个类型,这样就可以在视觉上对其进行分类(蛋白质、奶酪、酱汁等)。每一个都有一个 ID,通过这个 ID 可以轻松、明确地引用它。下面的成分类定义了需要的域对象。

程序清单 2.1 定义玉米卷的配料

package tacos;

import lombok.Data;

@Data
public class Ingredient {

  private final String id;
  private final String name;
  private final Type type;

  public enum Type {
    WRAP, PROTEIN, VEGGIES, CHEESE, SAUCE
  }

}

如您所见,这是一个普通的 Java 域类,定义了描述一个成分所需的三个属性。对于程序清单 2.1 中定义的 Ingredient 类,最不寻常的事情可能是它似乎缺少一组常用的 getter 和 setter 方法,更不用说像 equals()hashCode()toString() 等有用的方法。

在清单中看不到它们,部分原因是为了节省空间,但也因为使用了一个名为 Lombok 的出色库,它会在运行时自动生成这些方法。实际上,类级别的 @Data 注释是由 Lombok 提供的,它告诉 Lombok 生成所有缺少的方法,以及接受所有 final 属性作为参数的构造函数。通过使用 Lombok,可以让 Ingredient 的代码保持整洁。

Lombok 不是一个 Spring 库,但是它非常有用,没有它我很难开发。当我需要在一本书中保持代码示例简短明了时,它就成了我的救星。

要使用 Lombok,需要将其作为依赖项添加到项目中。如果正在使用 Spring Tool Suite,只需右键单击 pom.xml 文件并从 Spring 上下文菜单选项中选择 Edit Starters 即可。在第 1 章(图 1.4)中给出的依赖项的相同选择将出现,这样就有机会添加或更改所选的依赖项。找到 Lombok 选项,确保选中,然后单击 OK;Spring Tool Suite 将自动将其添加到构建规范中。

或者,可以使用 pom.xml 中的以下条目手动添加它:

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
</dependency>

如果您决定手动将 Lombok 添加到构建中,您还需要将其从 pom.xml 文件 <build> 部分中的 Spring Boot Maven 插件中排除:

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <configuration>
        <excludes>
          <exclude>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
          </exclude>
        </excludes>
      </configuration>
    </plugin>
  </plugins>
</build>

Lombok 的魔力是在编译时应用的,所以它不需要在运行时可用。像这样排除它会使它不出现在 JAR 或 WAR 文件中。

此依赖项将在开发时提供 Lombok 注释(如 @Data),并在运行时提供自动方法生成。但是还需要在 IDE 中添加 Lombok 作为扩展,否则 IDE 将会报错缺少方法和没有设置的最终属性。请访问 https://projectlombok.org/,以了解如何在 IDE 中安装 Lombok。

注意:为什么我的代码中有这么多错误提示呢?

再重复一遍,在使用 Lombok 时,必须安装 Lombok 插件到您的 IDE 中。没有它,您的 IDE 就不会意识到 Lombok 可提供 getter、setter 和其他方法,并会提示它们缺失。

Lombok 在许多流行的 IDE 中都受支持,包括 Eclipse,Spring Tool Suite、IntelliJ IDEA 和 Visual Studio Code。访问 https://projectlombok.org/ 可获取有关如何将 Lombok 插件安装进您的 IDE的详细信息。

您会发现 Lombok 非常有用,但它是可选的。如果不希望使用它,或是不需要它来开发 Spring 应用程序,那么请随意手动编写那些缺少的方法。继续……我将等待。完成后,将添加一些控制器来处理应用程序中的 web 请求。

配料只是玉米卷的基本组成部分。为了了解如何将所有配料组合在一起,我们定义 Taco 类:

程序清单 2.2 定义 taco 实体类

package tacos;
import java.util.List;
import lombok.Data;

@Data
public class Taco {

  private String name;

  private List<Ingredient> ingredients;

}

如您所见,Taco 是一个简单的 Java 对象,具有几个属性。此外,像 Ingredient 类一样,Taco 类也用 @Data 注释,以使 Lombok 在编译时自动生成基础 JavaBean 方法。

现在我们已经定义了 Ingredient 和 Taco,我们还需要定义客户如何指定他们想要订购的玉米卷,以及付款和送货方式信息,这就是TacoOrder 类:

程序清单 2.3 taco 订单实体类

package tacos;
import java.util.List;
import java.util.ArrayList;
import lombok.Data;

@Data
public class TacoOrder {

  private String deliveryName;
  private String deliveryStreet;
  private String deliveryCity;
  private String deliveryState;
  private String deliveryZip;
  private String ccNumber;
  private String ccExpiration;
  private String ccCVV;

  private List<Taco> tacos = new ArrayList<>();

  public void addTaco(Taco taco) {
    this.tacos.add(taco);
  }
}

除了拥有比 Ingredient 和 Taco 更多的属性之外,TacoOrder 没有什么特别的。它是一个简单的实体类,有九个属性:5 个用于交付 信息,3 个表示付款信息,1 个表示组成交易的 Taco 对象列表。还有一个 addTaco() 方法,它是为了方便将 taco 添加到订单中。

既然定义了实体类,我们就可以让它们工作了。让我们补充一些控制器来处理应用程序中的 web 请求。

results matching ""

    No results matching ""