2017-07-27 168 views
0

我設計/寫一個小UI工具包(用於自我改善的目的,還有什麼?),而且我不確定什麼樣的API會在下面的感覺會更好:具有副作用的不同功能或單個可指定屬性?

  1. 最低跆拳道?水平。
  2. 最靈活。
  3. 最簡潔但尚未描述的
  4. 最適合標準C++。

是重要的某些元素:

  • window類表示以及,窗口,並且可以顯示,隱藏,最小化,最大化,全屏最大化,並且關閉。
  • 我有一個proxy_property類,它可以被賦予任意的get和set函數,例如,反映應該通過外部API調用獲取或設置的當前值。
  • 我也有一個property類可以連接到(即觀察),並且當它被分配一個新的/不同的值時,會將這個新值告訴給它的觀察者。

我不確定什麼是最好的方式來處理窗口狀態:

  1. 私有成員變量,只有通過訪問hide()isVisible()等成員函數,Qt的風格。
  2. 只讀屬性(將需要一些額外的實現,因爲我現在還沒有這個工作了),它支持通過hide()show()等getter和相應的更新。
  3. A proxy_property可以被分配一個新的狀態,當分配一個新的值時導致對hide(),show()等或其組合的呼叫。

乍一看,我更喜歡3號的理由3,但鑑於其他條件,我不確定這個設計將如何保持。我只想說我沒有在任何地方看到過我的第3號數字,我害怕過分依賴我的proxy_property概念,因爲它可能會產生比它更大的開銷(另一方面,這是我們正在談論的UI代碼約,所以架空將在那裏)。

爲清楚:

enum class window_state { windowed, hidden, minimized, maximized, fullscreen_maximized }; 
class window 
{ 
public: 
    proxy_property<window_state> state; 
    //.... 
}; 

所以,一個可以做

some_window.state = window_state::minimized; 

真正做一些更傳統上由例如完成

some_window.minimize(); 

當然,最終結果在功能上是相同的。這只是完全不同的API。

+0

只要在some_window.minimize()內執行'some_window.state = window_state :: minimized;'''''''。調用'some_window.minimize();'對用戶來說更好。 – DimChtz

+0

嗯,是不是有點過分寬泛和意見的影響?我不認爲您存在的設計決策存在明確的方法。 – luk32

回答

0

我認爲你應該小心區分你可以設置的屬性(例如,visibility)和你可以觀察的屬性(例如,isVisible),因爲在許多情況下,可觀察的屬性不僅取決於設置。

一個控件,例如isVisible如果它有visibility == true而它的容器isVisible

沒有理由讓控件的visibility設置可觀察,事實上它可能會導致錯誤。

由於這個原因,我更喜歡visibility的setter和getters,而isVisible的listenable屬性。

相關問題