如何解决如何重构下课
我正在开发键值数据库(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);
};
为避免创建大量具有相同参数的函数-PROTOCOL
,DB_ADAPTER
和CONNECTION
,我创建了模板化的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 举报,一经查实,本站将立刻删除。