我将业务对象映射到实体,并且在某些情况下实体的结构与业务对象不同。
我将userCategories
其作为字符串存储在业务对象RecipeBo
中,因为 BO 不必了解实体的内部结构。这些字符串需要映射到 和 的关系Recipe
,RecipeUserCategoryRel
除此之外,另一个字段userId
也RecipeBo
需要映射到其中RecipeUserCategoryRel
。
我的方法(有效)是创建一个包装器并手动手动创建关系,但这看起来像是修修补补:
public class BoMapper
{
private final static ModelMapper modelMapper = new ModelMapper();
static
{
modelMapper.addMappings(new IngredientMap());
}
public static void map(Object from, Object to)
{
modelMapper.map(from, to);
if (from instanceof RecipeBo && to instanceof Recipe)
{
RecipeBo recipeBo = (RecipeBo)from;
List<String> userCategories = recipeBo.getUserCategories();
List<RecipeUserCategoryRel> recipeUserCategoryRels = new ArrayList<>();
for (String userCategory : userCategories)
{
recipeUserCategoryRels.add(new RecipeUserCategoryRel(userCategory, recipeBo.getUserId()));
}
Recipe recipe = (Recipe)to;
recipe.setRecipeUserCategoryRels(recipeUserCategoryRels);
}
}
}
我在 BoMapper 中所做的事情是否有更好的方法,例如使用转换器或其他东西?困难在于映射列表的每个元素并添加userId
字段。