2016-09-05 126 views
3

我有一個程序在第一次登錄時會從API中抓取幾個全局設置。然後這些值將在整個程序中廣泛使用。目前我正在將它們存儲在全局變量中,但它看起來不太符合OOP。全局變量的替代

用於存儲廣泛使用的設置的全局變量的替代方法有哪些?使用常量?類變量?我會在哪裏通過API調用初始化值,因爲這隻需要發生一次?我已經看到了一些實例化類來獲取變量的例子,但這對我來說沒有多大意義。

我想設置上登錄的價值觀和在此之後調用變量其他地方或用簡單的語句,比如Global.myvalue GLOBAL_MYVALUE

+0

我編輯的標題和這個問題試圖使這個簡單的列表問題而不是對任何「最好」的請求。意見問題在這裏做得不好,但列出問題,只要它們不太寬泛,可以沒問題。對全局變量沒有太多的選擇,所以我認爲現在已經足夠窄了。 –

回答

1

Singleton模式可能會爲這是很方便:

https://ruby-doc.org/stdlib-2.1.0/libdoc/singleton/rdoc/Singleton.html

+0

我一直在檢查它,我認爲它會工作。我應該在哪裏調用API來定義它的屬性?在其初始化方法?或在登錄方法的課堂外?請記住API調用是異步的 – Augusto

+0

Singleton模式在某些時候會出現一種糟糕的說唱,在許多情況下當然是如此,但這是其中一種真正可能是正確解決方案的情況之一。 – philomory

+0

@Augusto - 不知道哪裏是最好的。異步增加了難度。我猜你在繼續之前需要完成設置。 – seph

0

很難給你根據你提供的信息回答言簡意賅,但我會不惜一切代價避免使用全局變量。

一個好的起點是想一個類,它可能是所有使用這些變量並將它們存儲在該類中的地方的共同祖先。如果您的子類從該類繼承,則這些變量將自動在其上下文中可用。

編輯:像@seph貼,Singleton模式似乎是一個更好的解決方案,雖然

+0

我不會推薦使用基類:Derivation表示「is-a」關係,這裏不存在。另外,Ruby不允許多重繼承,所以一旦你從設置類派生出來,你就無法從其他任何東西中派生出來。 –