在Qt中,顯然有一個類可以讀取和寫入註冊表QSettings
(我只在Windows透視圖中說話)。當我們需要讀/寫值到註冊表時,正常的本能就是使用那個類,但它真的是「面向對象」的嗎?已經存在的註冊表類的包裝類是一種好方法嗎?
我覺得(以及我所做的)是爲我的應用程序編寫我自己的註冊表類,它在內部使用'QSettings'。我禁止我的申請直接使用QSettings
,並要求所有註冊表都應該通過我自己的課程來處理,我已經命名爲'註冊表'。
從我的舊代碼,請看下面的例子:
void MainWindow::on_actionSettings_triggered()
{
SettingsDialog * settings = new SettingsDialog;
settings->exec();
if (settings->result() == QDialog::Accepted)
{
IP = QSettings().value(IP_ADDRESS, DEFAULT_IP_ADDRESS).toString();
emit ui->actionRefresh_Devices->triggered();
}
delete settings;
}
在我的新代碼的功能性能稍微改變:
void MainWindow::on_actionSettings_triggered()
{
SettingsDialog * settings = new SettingsDialog;
settings->exec();
if (settings->result() == QDialog::Accepted)
{
IP = Registry().getLastIP();
emit ui->actionRefresh_Devices->triggered();
}
delete settings;
}
即使它很微小的變化,但感覺多了很多對象面向我。你會同意嗎?
沿着相同的路線,我對每個數量都有單獨的功能,即使它們都是字符串。你會同意這是好的做法還是隻是增加額外的代碼?這是我的小課Registry
。
class Registry
{
public:
Registry();
~Registry();
protected:
QSettings settings;
public:
QString getSyncPath();
void setSyncPath(QString syncPath);
QString getLastIP();
void setLastIP(QString ip);
void writeCustomIPs(const QStringList& customIPs);
QStringList readCustomIPs();
};
總之,面向對象是用類,我們確實有一個類註冊表,以便檢查標記爲,但它仍然只是太普通。把這樣的泛型類包裝到另一個更具體的類中是否構成了一般的良好實踐?
謝謝,我沒想到這樣一來,但是因爲你所指出的,是的,它是門面有意義。我覺得像我的代碼更容易通過類似於'Registry()。getLastIP()'的調用這樣的方式進行讀取,而不是在那裏使用QSettings。 – zar