如何重构下课

问题描述

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

@H_404_0@我有这样的代码

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);
};
@H_404_0@为避免创建大量具有相同参数的函数-PROTOCOLDB_ADAPTERCONNECTION,我创建了模板化的class keyvalueWorkerProcessor

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

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

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

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

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

@H_404_0@我正在使用C ++ 17。

解决方法

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

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

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