我一直在努力(http://tinyurl.com/m4hzjb)在這個Fluent API實例化ASP.NET控件,並感覺我現在有東西看起來工作得很好。我在尋找一些反饋和意見......好,壞或無動於衷。你會發現這有用嗎?您預見的任何技術問題?需要改進的地方?C#流利的API用於樓宇控制:需要反饋
這裏是一個很用於創建標準TextBox控件的基本用法示例。只有兩個屬性/方法被實現,但是API可以很容易地擴展以支持完整的屬性特徵集合。
用法
Factory.TextBox()
.ID("TextBox1")
.Text("testing")
.RenderTo(this.form1);
// The above TextBox Builder is functionally same as:
TextBox textbox = new TextBox();
textbox.ID = "TextBox1";
textbox.Text = "testing";
this.form1.Controls.Add(textbox);
// Or:
this.form1.Controls.Add(new TextBox {
ID = "TextBox1",
Text = "testing"
});
下面是完整的ControlBuilder類。
BUILDER
public partial class Factory
{
public static TextBoxBuilder TextBox()
{
return new TextBoxBuilder(new TextBox());
}
}
public abstract class ControlBuilder<TControl, TBuilder>
where TControl : Control
where TBuilder : ControlBuilder<TControl, TBuilder>
{
public ControlBuilder(TControl control)
{
this.control = control;
}
private TControl control;
public virtual TControl Control
{
get
{
return this.control;
}
}
public virtual void RenderTo(Control control)
{
control.Controls.Add(this.Control);
}
public TBuilder ID(string id)
{
this.Control.ID = id;
return this as TBuilder;
}
}
public abstract class TextBoxBuilder<TTextBox, TBuilder> : ControlBuilder<TTextBox, TBuilder>
where TTextBox : TextBox
where TBuilder : TextBoxBuilder<TTextBox, TBuilder>
{
public TextBoxBuilder(TTextBox control) : base(control) { }
public TBuilder Text(string text)
{
this.Control.Text = text;
return this as TBuilder;
}
}
public class TextBoxBuilder : TextBoxBuilder<TextBox, TextBoxBuilder>
{
public TextBoxBuilder(TextBox control) : base (control) { }
}
我同意。我也質疑需要。該項目開始時只是試圖弄清楚這種語法糖是否可以用於控制建築。但是,我確實質疑需求以及它是否進一步混淆了事情。 – jlang 2009-09-01 18:31:54
更清晰的爭論只是表達一種偏好。流利就像編碼風格,但我不能說天氣它更具可讀性 – 2009-09-01 18:44:24
@Oplopanax:我同意,這就是爲什麼我明確地將我的陳述冠以「To me」前綴。但是,這不是提供新功能,而是提供不同的編程抽象。任何抽象只能在可讀性,可維護性,性能等方面提供某些明顯的優勢時才被編寫和優先選擇。在這種情況下,我不明白這是如何改進當前接受的實踐。 – 2009-09-01 18:49:23