gpt4 book ai didi

java - 在 ManyToMany 集合和 Demeter 定律上运行的服务方法

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:36 26 4
gpt4 key购买 nike

我在设计在 SpringMVC/Hibernate Rest Web 应用程序中的 @ManyToMany 集合上运行的服务方法时遇到问题,而不使用违反 Demeter 法则的长方法链。我的应用程序有食谱,食谱内有成分的集合。

我不确定像addIngredientToRecipe()或deleteIngredientFromRecipe()这样的操作是否应该在Recipe类、Ingredient类中,或者我应该创建一些RecipeIngredientOperator类?如何维护德米特法则并避免链式?

这是我的应用程序的结构:

public class Recipe {
@ManyToMany
private Set<Ingredient> ingredients = new HashSet<Ingredient>();
}

public class Ingredient {
@ManyToMany
private List<Recipe> recipeList;
}

以及我遇到问题的服务类别

@Service("RecipeService")
public class RecipeServiceImpl implements RecipeService {
@Autowired
private RecipeRepository recipeRepository;

// My approach #1: breaks LoD
@Override
public void addIngredientToRecipe(long id, Ingredient ingredient) {
recipeRepository.findById(id).getIngredients().add(ingredient);
}

// My approach #2: looks little better, but still it breaks LoD
@Override
public void deleteIngredientFromRecipe(Ingredient ingredient, Recipe recipe) {
recipe.getIngredients().remove(ingredient);
recipeRepository.save(recipe);
}

我将非常感谢您提出解决此问题的正确方法的建议。

最佳答案

为了好好阅读...... http://www.yegor256.com/2016/07/18/law-of-demeter.html

我不介意链接,但我认为更重要的是 RecipeServiceImpl 不知道您存储配方和成分的数据结构。

recipe.removeIngredient(ingredient);

recipeRepository.addIngredient(recipeId, ingredient);

关于java - 在 ManyToMany 集合和 Demeter 定律上运行的服务方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49521537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com