Model-View-Controller and GTK Tree View - 創意海豚的部落格 - udn部落格
創意海豚的部落格
作家:陳重嘉
文章分類
    Top
    Model-View-Controller and GTK Tree View
    2018/03/06 14:40:47
    瀏覽:968
    迴響:0
    推薦:5
    引用0

    一位相當早期的挪威籍電腦科學家 Trygve Reenskaug 在 1970 年代提出了 Model-View-Controller 的概念,其主要目的是為了 code reuse 以及 parallel development (例如,Model 與 View 由不同的人或團隊所負責,而 Controller 則需兩者相互溝通來訂定規格,如此為之就能同時開發其所負責的軟體元件),其中 View 主要是指 GUI 對於資料的顯示方式,而 Controller 則有兩個面向,第一個面向在 GUI 端,第二個面向則在 Model 端;GUI 端必須提供可下達「執行資料運作」的介面,例如 add、delete、double click(activate) 的 GUI 元件,而 Model 端則需提供 API 來讓 Controller 端做呼叫。至於 Model,則是整個 Application 的核心所在,所有融合與實現 domain knowledge 與 business rules 的資料結構、演算法、軟體元件、以及軟體架構等等,全部都放在 Model 之中。

    GTK TreeView 也是採用 Model-View-Controller 的設計,筆者在閱練 GtkTreeView widget 之後,寫了兩個範例程式,簡單地示範 GtkTreeView widget 底層所提供的兩種 data model: GtkListStore 與 GtkTreeStore。

    請注意上述所提到的 Model,以 GtkTreeView 為例,是包含 Gtk 所提供的 GtkListStore 與 GtkTreeStore 這兩個 GUI data model,以及 Application 所針對的產業而所必須實現與融合的 domain knowledge 與 business rule,並包含與其相關的資料結構、演算法、軟體元件、以及軟體架構等等。


    < Model-View-Controller Concept >

    在 wikipedia 網站上關於 Model-View-Controller 的解釋圖片,其中 Controller 與 View 之間沒有任何的運作關係,對此筆者認為需要修正一下,因為實際的使用範例,user 是可以透過 Controller 去改變 View,例如 user 對 GtkTreeView 中的某一個 row 做 double-click,之後 GtkTreeView 開啟另一個視窗來顯示更加詳細的資訊,此例就是 user 透過 Controller 去改變 View,但沒有動到 Model。 




    < GtkTreeView >

    GtkTreeView 是以 column-based 的方式來設定如何顯示同一種類別的資料, 而資料的選擇則是採用 row-based 的方式。


    < GtkTreeModel >

    GtkTreeModel 主要有兩種:GtkListStore 與 GtkTreeStore;在 GtkListStore 之中,row 與 row 彼此之間是獨立的,並沒有從屬關係;在 GtkTreeStore 之中,row 與 row 之間可能具有 Parent-Child 的從屬關係。

    GtkTreeModel 是以 column-based 的方式來規劃與描述各個欄位,而資料的增加與移除方式,則是採用 row-based 的方式。

    GtkTreeView 與 GtkTreeModel 彼此是獨立的,因此得透過 API

              gtk_tree_view_set_model(tree_view, tree_model);

    來建立兩者之間的關連性。

    資料的增加與移除是由 GtkTreeModel (亦即 GtkListStore 或 GtkTreeStore) 所負責,與 GtkTreeView 無關,GtkTreeView 只負責顯示 GtkTreeModel 的資料。


    < GtkTreeView and GtkListStore >




    < GtkTreeView and GtkTreeStore >

    screen snapshot 1



    screen snapshot 2



    screen snapshot 3



    screen snapshot 4



    screen snapshot 5

    回應

    限會員,要發表迴響,請先登入