行爲聚集

    軟件開發技術的技術本質在於對代碼結構的有效控制. 我們需要能夠有效的分解/重組代碼片斷, 凸顯設計意圖. 面向對象是目前最常見的代碼組織技術. 典型的, 它可以處理如下模式
  A1 --> B2,  A2 --> B2,  A3 --> B3 ...
我們觀察到A1和A2之間, B2和B2之間具有某種概念關聯性, 同時存在某種抽象結構 [A] --> [B].
對於這種情況, 我們可以定義對象 [A], [B], 它們分別是 A1和A2的聚合, B1和B2的聚合等. 舉例來說, 對於如下表格描述, <ui:Col>所提供的信息在映射爲html實現的時候將在多處被應用.
<ui:Table data="${data}">
  <ui:Col name="fieldA" label="labelA" width="20" />
  <ui:Col name="fieldB" label="labelB" width="10" /> 
</ui:Table>
這裏<ui:Col>提供的信息對應三個部分的內容: 1. 列標題 2. 列樣式(寬度等)  3. 列數據

面向對象的常見做法是抽象出 UiCol對象, 它作爲UiTable對象的屬性存在, 在生成表頭, 表列樣式和表格數據內容時將被使用. 但是我們注意到面向對象要求多個方法通過this指針形成狀態耦合

,在某種意義上它意味着所有的成員方法在任一時刻都是同時存在着的。它們所代表着的存在的代價必須被接受(存儲空間等)。即使並不同時被使用,我們仍然需要同時持有所有成員函數指針及

共享的this指針。實際上, 我們並不一定需要A1和A2同時在場. 在這種情況下, 編譯期技術可以提供另一種不同的行爲聚合方式.


<table>
  <thead>
    <sys:CompileTagBody cp:part="thead" />
  </thead>
  <cols>
    <sys:CompileTagBody cp:part="cols" />
  </cols>
  <tbody>
    <sys:CompileTagBody cp:part="tbody" />
  </tbody>
</table>

只要<ui:Col>標籤的實現中針對編譯期的cp:part變量進行分別處理, 即可實現信息的部分析取.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章