: TemeldeRefactoring büyük C++ sınıfı
class CCpu6502 {
public:
/*....*/
void fetch8();
void fetch16();
void ADC();
void AND();
/* Around 50+ cpu instruction types */
private:
/*register state, jump table definition*/
};
, ben uygun üye işlevini işlem kodu alır ve yürütür bir atlama masası var - değişen cpu'nun dahili durumu. Doğru adresleme türünü belirleyen diğer bazı görevler vardır.
Sınıf tanımının, test edilmenin yanı sıra ayrıştırmanın çok büyük ve zor olduğunu fark ettim. Bununla birlikte, sınıfı ayrı sınıflara ayırmak problemlidir çünkü hemen hemen her işlev cpu'nun dahili durumunu değiştirecektir. Sonra görünüyor her sınıf bir arkadaş, yaparak cpu iç durumuna her talimat işleyici sınıf erişimi vermek zorunda kalacak,
class AInstructionHandler {/*...*/};
class CArithmeticInstHandler : public AInstructionHandler{/*...*/};
class CBranchInstHandler : public AInstructionHandler{/*...*/};
/*memory accessors, logical, etc. */
Ancak:
ben gibi talimat türleri sınıflandırmak düşündü Kötü bir fikir gibi.
Neredeyse tüm yöntemlerin nesnenin durumunu etkilediği veya tasarımımın başlangıçta kusurlu olduğu büyük bir sınıfı yeniden düzenlemenin tercih edilen bir yolu olup olmadığını merak ediyorum.
Teşekkür
CPU durumunu uygun alıcılar/ayarlayıcılar aracılığıyla ortaya koyarım ve komutları CPU'nun genel arabirimini kullanan üye olmayan, arkadaşlık dışı işlevlere sahip olurum. – Nim
Belki [Strateji Kalıbı] (http: // en.wikipedia.org/wiki/Strategy_pattern) burada yararlı olabilir. Her op kodu bir strateji olabilir. – Steve