我的代码中有许多重复的功能如何简化它们

Posted

技术标签:

【中文标题】我的代码中有许多重复的功能如何简化它们【英文标题】:There are many repetitive functions in my codes how to simplify them 【发布时间】:2021-07-10 02:23:48 【问题描述】:

这是一个spring-boot项目,使用MVC结构

我有 3 种类型的需求延伸到BaseDemand

public class DropTableDemand extends BaseDemand
public class ExpandTableDemand extends BaseDemand
public class CreateTableDemand extends BaseDemand

我有 3 个服务来控制它们并用mybatis-plus DAO 保存它们

public class DropTableDemandService 

    @Autowired
    private DropTableDemandDao dropTableDemandDao;

    public List<DropTableDemand> queryByOrgIDs(List<String> orgIDs, Integer page, Integer rows) 
        if (page != null && rows != null) 
            PageHelper.startPage(page, rows);
        
        Weekend<DropTableDemand> weekend = Weekend.of(DropTableDemand.class);
        WeekendCriteria<DropTableDemand, Object> criteria = weekend.weekendCriteria();
        criteria.andIn(DropTableDemand::getTableOrg, orgIDs);
        return dropTableDemandDao.selectByExample(weekend);
    

public class ExpandTableDemandService 

    @Autowired
    private ExpandTableDemandDao expandTableDemandDao;

    public List<ExpandTableDemand> queryByOrgIDs(List<String> orgIDs, Integer page, Integer rows) 
        if (page != null && rows != null) 
            PageHelper.startPage(page, rows);
        
        Weekend<ExpandTableDemand> weekend = Weekend.of(ExpandTableDemand.class);
        WeekendCriteria<ExpandTableDemand, Object> criteria = weekend.weekendCriteria();
        criteria.andIn(ExpandTableDemand::getTableOrg, orgIDs);
        return expandTableDemandDao.selectByExample(weekend);
    

public class CreateTableDemandService 

    @Autowired
    private CreateTableDemandDao createTableDemandDao;

    public List<CreateTableDemand> queryByOrgIDs(List<String> orgIDs, Integer page, Integer rows) 
        if (page != null && rows != null) 
            PageHelper.startPage(page, rows);
        
        Weekend<CreateTableDemand> weekend = Weekend.of(CreateTableDemand.class);
        WeekendCriteria<CreateTableDemand, Object> criteria = weekend.weekendCriteria();
        criteria.andIn(CreateTableDemand::getTableOrg, orgIDs);
        return createTableDemandDao.selectByExample(weekend);
    

DAO 就是这样的

public interface CreateTableDemandDao extends MyMapper<CreateTableDemand> 


public interface DropTableDemandDao extends MyMapper<DropTableDemand> 


这些服务中有很多重复的功能,但控制不同的类,如何简化它们

【问题讨论】:

【参考方案1】:
public WeekendCriteria getCriteria(Class clazz) 
    Weekend<BaseDemand> weekend = Weekend.of(clazz);
    WeekendCriteria<BaseDemand, Object> criteria = weekend.weekendCriteria();
    return criteria;


....
getCriteria(CreateTableDemand.class).andIn(CreateTableDemand::getTableOrg, orgIDs);
....

试试这个!也许这行得通

【讨论】:

以上是关于我的代码中有许多重复的功能如何简化它们的主要内容,如果未能解决你的问题,请参考以下文章

谁能简化我的剃须刀页面代码。它包含很多重复的代码

如何连接所有列表(每个列表都是我的 for 循环)[重复]

不调试时如何禁用 console.log? [复制]

jenkins插件--Cobertura,JaCoCo,Emma-----

如何在 Python 中检查代码的运行时间。 PyCharm 是我的 IDE [重复]

如何将我的代码从回调函数更改为承诺 [重复]