Я работал (http://tinyurl.com/m4hzjb)) над этим Fluent API для создания экземпляров элементов управления ASP.NET и чувствую, что теперь у меня есть кое-что, что, кажется, работает хорошо. Мне нужны отзывы и мнения хорошо, плохо или безразлично. Считаете ли вы это полезным? Любые технические проблемы, которые вы предвидите? Возможность улучшения?
Вот очень пример базового использования для создания стандартного элемента управления TextBox. Реализуются только два свойства / метода, но API может быть легко расширен для поддержки полного набора свойств элемента управления.
1010 * ИСПОЛЬЗОВАНИЕ *
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) { }
}