遇到的問題:
這段時間在合作開發一個項目,這個項目是經典三層架構的,在U層我們使用的是網站而非項目,而B層和D層使用的是項目。(這裡解釋一下,這裡的項目並非我們整個系統,而是在建立的時候選擇的項目和網站,下同。)
我們在傳統的項目,經常用到模組,那麼我們抽象出來的模組就可以更好複用,這是物件導向中大家都明白的道理。
瞭解了我們這個問題的背景,下面我來說說這個問題:
在設計過程中,我發現很多地方都要把查到的資料繫結到dropdownlist中。這時我就想能不能把這個綁定的過程抽象出來,抽象成一個方法,這樣將來在需要修改的時候我只需要修改我的方法就行,而不是去找那麼多的地方一個個修改。
說到這裡,我突然想到,前些天米老師在一次項目驗收時,給我們講的關於物件導向的問題。米老師說,其實我們還沒有真正明白什麼是物件導向,沒有體會到物件導向的好處。真正的物件導向不是把寫好的代碼或者某個編譯好的類到處用,而應該是一種引用而非複製。類改了,那麼引用這個類的所有的地方都會跟著改。物件導向使得我們沒有必要一個個單獨去改他們。
其實這個方法很簡單,很容易實現。今天之所以拿出來說它,主要是想說說如何在一個網站項目中使用這樣的方法。
我們大家都知道,要想讓其他類都能使用這個方法,我們需要把這個方法放到一個類中。而物件導向的思想要求我們,對象只能擁有屬於它的屬性。而通常我們是把這個方法放到一個單獨的模組中。但是當我嘗試這樣做的時候,卻不能在一個網站項目中建立這樣一個模組。
對於這樣一個問題,我是這樣解決的:
在網站中建立一個類,這個類會被自動放入到App_Code檔案夾中。然後在這個類中建立一個靜態方法,這樣我們在U層的類中就可以直接調用這個方法啦!
using System;using System.Collections.Generic;using System.Linq;using System.Web;
//引入需要的類using System.Web.UI.WebControls;//因為我傳入的是一個控制項,這個方法要對控制項進行操作,所以引入該命名空間using System.Data;/// <summary>///將查到的資料繫結的下拉式清單/// </summary>public class BindingDrop{public BindingDrop(){////TODO: 在此處添加建構函式邏輯//} /// <summary> /// 將查到的資料繫結的下拉式清單 /// </summary> /// <param name="obj">要綁定的控制項</param> /// <param name="dt">來源資料表</param> /// <param name="textField">顯示的欄位--字串型</param> /// <param name="valueField">綁定的欄位--字串型</param> public static void bindDrop(DropDownList obj, DataTable dt, string textField, string valueField) //靜態方法 { //綁定資料 obj.DataSource = dt; //指定顯示欄位 obj.DataTextField = textField; //指定綁定值 obj.DataValueField = valueField; obj.DataBind(); //插入 請選擇 項 obj.Items.Insert(0, new ListItem("--請選擇--", "")); }}
這樣就可是實現和模組功能一樣的一個類,在介面層需要的地方直接使用類名調用該靜態方法即可。