繁体   English   中英

map 处理器如何 dto

[英]how to map processor to dto

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

实体结构(命名为 Meal):

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 到 map 值:

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;
    }
}

请点击这里:MealPlanner 完整流程

这样,preferenceType 和 cost 的值就会丢失。 我如何将 map preferenceType、resultState 传递给 DTO?

(注意:膳食计划流程作为步骤

  1. Map 用户对 MealDTO 的请求(仅包含 itemName)(除 itemName 之外的其他字段为空)。
  2. Map MealDTO 到 Meal 使用 FieldsMapper。
  3. 将 Meal 传递给第三方,黑盒逻辑。 此逻辑将返回 map,其结构为 {<portion, 2>, <cost, 14>, <preferenceType, VEGETARIAN>, <resultState, OPTIMAL> }
  4. 部分和成本映射到膳食实体字段部分成本。
  5. Map Meal to MealDTO 并返回 DTO object。)

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

我认为您应该做的是创建另一个 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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM