如何使用百里香的弹簧靴正确设计“将对象添加到列表中”

问题描述 投票:-1回答:1

我有两类食物和食物类型:

public class Food {
    //other attributes and constructor and getters and setters are ignored

    @ManyToMany(targetEntity = FoodType.class, fetch = FetchType.LAZY)
    @JoinTable(name = "food_type_",
        joinColumns = {@JoinColumn(name = "fid")},
        inverseJoinColumns = {@JoinColumn(name = "tid")})
    private List<FoodType> types = new ArrayList<>();

}

public class FoodType {
    @Id
    @GeneratedValue
    private long id;

    private String type;

    @ManyToMany(targetEntity = Food.class, fetch = FetchType.LAZY, mappedBy = "types")
    private List<Food> foodList = new ArrayList<>();
    //constructor and getters and setters are ignored
}

要求是:应该允许用户通过视图添加新的食物,因此我想知道如何在视图中添加FoodType到Food?

我已经读过这个answer,看起来在视图中操作数据并不是一个好主意,所以如果你是程序员,你将如何设计MVC层以便它能够正确处理需求?

PS:我对JS知之甚少,是否可以在Thymeleaf中做到这一点?

spring-boot spring-mvc thymeleaf
1个回答
0
投票

您应该遵循MVC分层架构以正确实现您的需求。作为一般设计指南:

  1. 向用户呈现具有表单和所需输入的UI。这是百里香的一部分。 (查看图层)
  2. 使用控制器捕获表单发布数据,验证输入等。
  3. 对业务层进行编码以获取已发布数据并保存对象等。
  4. 使用Service和Repository接口来实现基本的CRUD和类似操作。

作为最后的评论;如何将多个FoodType保存到单个Food对象如下(在您的控制器或业务逻辑层中,您可以执行此操作):

Food aFood = new Food(); // Empty Food to save
aFood.types.add(new FoodType(id, "Pizza"));
aFood.types.add(new FoodType(id, "Burger"));
foodService.save(aFood); // Assuming you are using Service Layer
© www.soinside.com 2019 - 2024. All rights reserved.