C # Свободный API для управления зданием: требуется обратная связь - PullRequest
0 голосов
/ 01 сентября 2009

Я работал (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) { }
}

Ответы [ 2 ]

3 голосов
/ 01 сентября 2009

Я подвергаю сомнению необходимость здесь. Для меня это:

Factory.TextBox()
    .ID("TextBox1")
    .Text("testing")
    .RenderTo(this.form1);

Гораздо менее ясно, чем:

this.form1.Controls.Add(new TextBox {
        ID = "TextBox1",
        Text = "testing"
    });

Что такое фабрика? Что произойдет, если мы забудем строку «RenderTo»?

Первый вариант не так очевиден для меня и будет менее удобен в обслуживании, поскольку было бы очень трудно расширить его для пользовательских элементов управления (если вы заранее не знаете свойств) и т. Д.

0 голосов
/ 01 сентября 2009

Мне нравится, как работают API-интерфейсы Fluent, и это может быть хорошим способом настройки динамических элементов управления.

У меня есть следующие пункты:

  • Стиль Fluent API - это просто стиль.Он выполняет то же самое, что и традиционный стиль функционального программирования, с другой эстетикой.
  • Многие пользователи просто используют конструктор форм для разработки элементов управления, и этого достаточно.Если вы не создаете элементы управления во время выполнения, они не будут использоваться очень часто.
  • В дополнение к вышесказанному, большинство созданных мной элементов управления во время выполнения, как правило, имеют некоторую логику «если то, что еще».Стиль Fluent допускает простые конфигурации, но становится громоздким, когда в процессе сборки много логики.
  • Мне было бы трудно убедить себя или других архитекторов в команде, что в этом есть какие-то преимущества, кроме читабельности или стилистики, по сравнению с традиционным подходом.
  • Наконец, мой рабочий код должен зависеть от другой библиотеки, и всегда есть вероятность, что вы, возможно, ввели ошибку.

В конечном счете, я должен сказать, хорошо, чтобы вы взяли это на себя.Это отличное упражнение, и кто-то может его использовать.Сделайте его открытым исходным кодом, и через несколько лет он может стать стандартом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...