ASP.NET コントロールをインスタンス化するために、この Fluent API に取り組んできました ( http://tinyurl.com/m4hzjb )。私はいくつかのフィードバックと意見を探しています...良い、悪い、または無関心。これは役に立ちますか?予想される技術的な問題はありますか? 改善の余地?
標準の TextBox コントロールを作成するための非常に基本的な使用例を次に示します。2 つのプロパティ/メソッドのみが実装されていますが、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 クラスを次に示します。
ビルダー
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) { }
}