如何将处理器映射到 dto

how to map processor to dto

我正在构建一个 MealPlanner 应用程序,该应用程序根据用户偏好构建膳食菜单,我需要一些指导来设置 DTO 中的 2 个字段(字段名称:preferenceType、resultState)。

实体结构(名为膳食):

class Meal {
    String itemName; //Such as Pizza, Sandwich
    double portion; //such as 1.5
    double cost; //such as 15.5, default currency is dollars
}

DTO 的结构:

class MealDTO {

    //Identical to Meal
    String itemName;
    double portion;
    double cost;

    //Additional fields in DTO
    String preferenceType; //FAT FREE, DAIRY FREE, VEGETARIAN
    String resultState; //OPTIMAL, FEASIBLE, INFEASIBLE
}

Class 映射两个 类:

之间的值
public class FieldsMapper {

    // MealDTO -> Meal
    public Meal MealDtoToMeal(MealDTO mealDto) {
        Meal meal = new Meal();
        meal.setItemName(mealDto.getItemName());
        return meal;
    }

    //Meal -> MealDTO
    public MealDTO MealToMealDto(Meal meal) {
        MealDTO mealDto = new MealDTO();
        mealDto.setItemName(meal.getItemName());
        mealDto.setPortion(meal.getPortion());
        mealDto.setCost(meal.getCost());
        return mealDto;
    }
}

Please click here: MealPlanner full flow

这样,preferenceType 和 cost 的值就丢失了。 如何将 preferenceType、resultState 映射到 DTO?

(注意:Meal Planner 流程​​为步骤

  1. 将用户请求(仅包含itemName)映射到MealDTO(除itemName外的其他字段为空)。
  2. 使用 FieldsMapper 将 MealDTO 映射到膳食。
  3. 给第三方送餐,黑盒逻辑。此逻辑将 return 具有结构 {, ,
    ,  }
  4. 的地图
  5. 部分和成本映射到膳食实体字段部分,成本。
  6. 将 Meal 映射到 MealDTO 和 return DTO 对象。)

首先,我认为您应该为 resultState 和 preferenceType 字段使用枚举而不是字符串,因为它们具有固定值。

我认为您应该做的是创建另一个 DTO,其中包含 MealDTO 以及 resultState 和 preferenceType 字段,例如 UserMealDTO。所以像:

class UserMealDTO {
    MealDTO meal;
    MealPreference preferenceType;
    ResultState resultState; 
}

// Enums 

public enum MealPreference {
    FAT FREE, DAIRY FREE, VEGETARIAN;
}

public enum ResultState {
    OPTIMAL, FEASIBLE, INFEASIBLE;
}