You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

租赁房产图片上传Service方法的图片类型区分最优方案咨询

最优解决方案:基于枚举+策略的可扩展图片上传实现

针对你的问题,推荐使用枚举封装图片类型与对应更新逻辑的方案,既能消除重复代码,又能保证后续新增图片类型时的扩展性。

1. 定义图片类型枚举

将每种图片类型对应的DAO更新逻辑封装到枚举中,枚举作为类型标识的同时承担策略角色:

public enum RentalImageType {
    BEDROOM("BedroomImageId") {
        @Override
        public void updateImageId(RentalDao rentalDao, String imageId, Long rentalId) {
            rentalDao.updateBedroomImageId(imageId, rentalId);
        }
    },
    BATHROOM("BathroomImageId") {
        @Override
        public void updateImageId(RentalDao rentalDao, String imageId, Long rentalId) {
            rentalDao.updateBathroomImageId(imageId, rentalId);
        }
    },
    // 未来新增车库、庭院等类型时,直接添加枚举值即可
    GARAGE("GarageImageId") {
        @Override
        public void updateImageId(RentalDao rentalDao, String imageId, Long rentalId) {
            rentalDao.updateGarageImageId(imageId, rentalId);
        }
    };

    private final String dbColumnName;

    RentalImageType(String dbColumnName) {
        this.dbColumnName = dbColumnName;
    }

    // 抽象方法:由各枚举实现对应DAO更新逻辑
    public abstract void updateImageId(RentalDao rentalDao, String imageId, Long rentalId);

    public String getDbColumnName() {
        return dbColumnName;
    }
}

2. 改造Service层方法

将枚举作为参数传入,抽离通用逻辑,类型专属逻辑交给枚举处理:

public void uploadRentalImage(Long rentalId, MultipartFile file, RentalImageType imageType) {
    // 通用逻辑:生成唯一图片ID
    String imageId = UUID.randomUUID().toString();
    
    // 通用逻辑:文件存储(如上传至对象存储、本地磁盘等,此处省略具体实现)
    // saveFileToStorage(file, imageId);

    // 调用枚举封装的类型专属更新逻辑
    imageType.updateImageId(rentalDao, imageId, rentalId);
}

3. 调用示例

业务层调用时直接指定枚举类型,语义清晰且类型安全:

// 上传卧室图片
rentalImageService.uploadRentalImage(rentalId, bedroomFile, RentalImageType.BEDROOM);

// 上传浴室图片
rentalImageService.uploadRentalImage(rentalId, bathroomFile, RentalImageType.BATHROOM);

方案优势

  • 无重复代码:生成ID、文件存储等通用逻辑仅需实现一次,避免冗余
  • 扩展性强:新增图片类型时,仅需在枚举中添加新值并实现对应DAO更新方法,无需修改Service核心逻辑
  • 类型安全:通过枚举约束参数,避免传入非法类型字符串,编译期即可发现错误
  • 语义清晰:枚举名直接表达图片类型,代码可读性高

内容的提问来源于stack exchange,提问作者Clippit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 23:17:45