如何重构下课

问题描述

我正在开发键值数据库(https://github.com/nmmmnu/HM4

我有这样的代码:

enum class Command{
    INFO,SAVE,RELOAD,GET,GETX,COUNT,SUM,MIN,MAX 
};

template<class PROTOCOL,class DB_ADAPTER,class CONNECTION>
class KeyValueWorkerProcessor{
    PROTOCOL    &protocol_;
    DB_ADAPTER  &db_;
    CONNECTION  &buffer_;

public:
    KeyValueWorkerProcessor(PROTOCOL &protocol,DB_ADAPTER &db,CONNECTION &buffer) :
                    protocol_(protocol),db_(db),buffer_(buffer){}

    auto operator()(Command cmd){
        switch(cmd){

        case Command::INFO  : return do_info();
        case Command::SAVE  : return do_save();
        case Command::RELOAD    : return do_reload();

        case Command::GET   : return do_get();
        case Command::GETX  : return do_getx();

        case Command::COUNT : return do_count();
        case Command::SUM   : return do_sum();
        case Command::MIN   : return do_min();
        case Command::MAX   : return do_max();

        default         : return err_NotImplemented_();
        }
    }

    // I have lots of these:

    WorkerStatus do_info();
    WorkerStatus do_save();
    WorkerStatus do_reload();

    WorkerStatus do_get();
    WorkerStatus do_getx();

    WorkerStatus do_count();
    WorkerStatus do_sum();
    WorkerStatus do_min();
    WorkerStatus do_max();
};

template<class PROTOCOL,class CONNECTION>
auto do_something(PROTOCOL &protocol,CONNECTION &buffer,Command cmd){
    using MyKeyValueWorkerProcessor = KeyValueWorkerProcessor<PROTOCOL,DB_ADAPTER,CONNECTION>;

    MyKeyValueWorkerProcessor processor{ protocol,db,buffer };

    return processor(cmd);
};

为避免创建大量具有相同参数的函数-PROTOCOLDB_ADAPTERCONNECTION,我创建了模板化的class KeyValueWorkerProcessor

这样可以节省很多样板代码,例如否则我需要做:

template<class PROTOCOL,class CONNECTION>
WorkerStatus do_info(PROTOCOL &protocol,CONNECTION &buffer);

template<class PROTOCOL,class CONNECTION>
WorkerStatus do_save(PROTOCOL &protocol,CONNECTION &buffer);

但是现在,我在模板化的class KeyValueWorkerProcessor中有很多方法,我绝对不喜欢。

有什么好办法可以重构它吗?

我正在使用C ++ 17。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...