串接介面(Fluent interface)是繼裝飾者模式(Decorator Pattern)後最常出現在文章上了
從JQuery了解這個撰寫方式後, JavaScript寫法變精簡了, 但還是沒有導入JQuery
因為自行整理一套Library在使用^_^
但是這種寫法一直停留在JavaScript, 沒有導入到VB.NET內
因為一直遇不到適合的情況使用, 心裡很悶, 又不想硬用-_-
直到有一天在處理GridView標題列時, 好像突然被電到, 眼晴發出雄雄烈火~~~
先說明一下遇到的狀況, 在處理GridView標題列, 是一欄一欄的進行產生及設定然後加到列的物件中
但是各欄的狀況不太一樣, 比如跨欄, 跨列, 顯示文字, 水平置中, 靠右, 靠左,靠上, 靠下
一欄的基本設定程式碼如下
Dim td As TableCell = New TableCell td.Text = "" td.HorizontalAlign = HorizontalAlign.Center td.VerticalAlign = VerticalAlign.Middle td.RowSpan = 1 td.ColumnSpan = 1 tr.Cells.Add(td)
※如果呆呆的寫, 就是複製貼上的一直寫下去, 落落長的程式碼就這樣子被生出來了
※好一點的, 就寫成一個共用的函數來呼叫
tr.Cells.Add(new_td(Text,Align,vAlign,rowspan,cellspan)) '自訂函數內容 Function new_td( Text,Align,vAlign,rowspan,cellspan ) As TableCell Dim td As TableCell = New TableCell td.Text = Text td.HorizontalAlign = Align td.VerticalAlign = vAlign td.RowSpan = rowspan td.ColumnSpan = cellspan Return td End Function
又要再多一個css屬性時, 怎麼辦?? 咱們可以透過多形來處理
tr.Cells.Add(new_td(Text,Align,vAlign,rowspan,cellspan,css)) '自訂函數內容 Function new_td( Text,Align,vAlign,rowspan,cellspan,css ) As TableCell Dim td As TableCell = New TableCell td.Text = Text td.HorizontalAlign = Align td.VerticalAlign = vAlign td.RowSpan = rowspan td.ColumnSpan = cellspan td.CssClass = css Return td End Function
事情圓滿解決了, 往後有需要增加屬性, 就複製貼上改一下就好啦~
請不要做這種事~~很容易被怨念纏身的=_=+
※進入正題, 來看看用Fluent interface的解決方案※
建立一個類別, 名稱為td_load, 內容如下
Public Class td_load Dim td As TableCell = New TableCell Function text(ByVal v As String) As td_load td.Text = v Return Me End Function Function align(ByVal v As Integer) As td_load td.HorizontalAlign = v Return Me End Function Function col(ByVal v As Integer) As td_load td.ColumnSpan = v Return Me End Function Function row(ByVal v As Integer) As td_load td.RowSpan = v Return Me End Function Function css(ByVal v As String) As td_load td.CssClass = v Return Me End Function Sub addTo(ByRef tr As TableRow) tr.Cells.Add(td) End Sub End Class
應用方式如下
'自訂函數內容 Function tdl() As td_load Return New td_load End Function '對齊列舉 Enum HA As Integer Center = HorizontalAlign.Center Right = HorizontalAlign.Right Left = HorizontalAlign.Left End Enum '第一列 tdl().text("日期").row(2).align(HA.Center).addTo(tr1) tdl().text("姓名").align(HA.Center).css("TBS").addTo(tr1) tdl().text("電話").align(HA.Center).css("TBS").addTo(tr1) tdl().text("地址").col(2).align(HA.Center).addTo(tr1) '第二列 tdl().text("備註").col(2).align(HA.Center).addTo(tr2) tdl().text("縣市").align(HA.Center).css("TBS").addTo(tr2) tdl().text("路段").align(HA.Center).css("TBS").addTo(tr2)
將以上程式碼改為最上方的方式呈現的話, 這篇文章到這句話是寫不完的
如上~~希望對您有幫助
全站熱搜