C++:方法重复自身;需要DRY优化

C++: Methods repeating themselves; DRY optimization needed

本文关键字:需要 DRY 优化 方法 C++      更新时间:2023-10-16

这个类的三个初始化方法非常、非常、非常相似。我想看看是否有一种方法可以将调用链接在一起,可能会将调用链接到需要两个参数的方法中。谢谢

AudioHandler.h

class AudioHandler {
public:
    static bool Initialize(const SoundLibrary& sl);
    static bool Initialize(const Soundtrack& st);
    static bool Initialize(const SoundLibrary& sl, const Soundtrack& st);
    static void Release();
private:
    static const SoundLibrary* _sl;
    static const Soundtrack* _st;
};

音频处理程序.cpp

bool AudioHandler::Initialize(const SoundLibrary& sl) {
    if(_sl != NULL || _st != NULL) return false;
    unsigned long numVoices = 0;
    //If allegro is unable to initialize the sound drivers then return false.
    if((numVoices = detect_digi_driver(DIGI_AUTODETECT)) == 0) return false;
    if(install_sound(DIGI_AUTODETECT, MIDI_NONE, NULL) == -1) return false;
    _sl = &sl;
    return true;
}
bool AudioHandler::Initialize(const Soundtrack& st) {
    if(_sl != NULL || _st != NULL) return false;
    if(detect_midi_driver(MIDI_AUTODETECT) == 0) return false;
    if(install_sound(DIGI_NONE, MIDI_AUTODETECT, NULL) == -1) return false;
    _st = &st;
    return true;
}
bool AudioHandler::Initialize(const SoundLibrary& sl, const Soundtrack& st) {
    if(_sl != NULL || _st != NULL) return false;
    unsigned long numVoices = 0;
    if((numVoices = detect_digi_driver(DIGI_AUTODETECT)) == 0) return false;
    if(detect_midi_driver(MIDI_AUTODETECT) == 0) return false;
    if(install_sound(DIGI_AUTODETECT, MIDI_AUTODETECT, NULL) == -1) return false;
    _sl = &sl;
    _st = &st;
    return true;
}
void AudioHandler::Release() {
    _sl = NULL;
    _st = NULL;
    remove_sound();
}
  1. 仅保留第三种变体
  2. 更改对指针的引用
  3. 为不需要的参数发送NULL
  4. 执行特定代码之前,请检查NULL

PS:在您当前的版本中,将传递的引用的地址存储在对象中不是一个好主意。

这些函数都很短,所以我不得不怀疑修改代码是否值得花费时间或精力。但我可能也想这么做。您可以创建另一个私有函数,其他三个函数使用某些参数调用该函数来执行它们共同的所有操作。这样,通用操作就在一个地方。它是否值得由你决定。如果你担心将来的维护,那就去做吧。