Есть ли пример шаблона Builder в .NET BCL? - PullRequest
4 голосов
/ 29 мая 2009

Есть ли пример шаблона полного компоновщика в библиотеке базовых классов .NET? Я ищу что-то, у кого есть реальный директор и несколько бетонщиков.

Ответы [ 2 ]

10 голосов
/ 04 июня 2009

Я далеко не эксперт в этой области, но я думаю , что DbCommandBuilder и его наследующие классы ( OdbcCommandBuilder , OleDbCommandBuilder , SqlCommandBuilder ) может быть примером ... если все в порядке, базовый класс абстрактного построителя также служит в качестве директора. Различные конкретные классы делегируют свой базовый класс, который затем вызывает такие методы (для каждого рефлектора):

private DbCommand BuildDeleteCommand(DataTableMapping mappings, DataRow dataRow)
{
    DbCommand command = this.InitializeCommand(this.DeleteCommand);
    StringBuilder builder = new StringBuilder();
    int parameterCount = 0;
    builder.Append("DELETE FROM ");
    builder.Append(this.QuotedBaseTableName);
    parameterCount = this.BuildWhereClause(
        mappings, dataRow, builder, command, parameterCount, false);
    command.CommandText = builder.ToString();
    RemoveExtraParameters(command, parameterCount);
    this.DeleteCommand = command;
    return command;
}

Это удовлетворяет некоторым требованиям, предъявляемым к строителю:

  • абстрактный класс строителя
  • класс строителей бетона
  • сложное многошаговое построение в различных методах DbCommandBuilder (BuildDeleteCommand, BuildInsertCommand, BuildUpdateCommand)
  • product (DbCommand, приведенный к конкретному типу команды конкретными классами), который является более сложным, чем просто строка SQL, поскольку имеет тайм-аут, тип команды, потенциально транзакцию и т. Д.

Но нет отдельного класса, выступающего в качестве директора; по сути, базовый класс DbCommandBuilder является директором.

2 голосов
/ 29 мая 2009

Несколько бетонных строителей? Не то, что я знаю, если не считать WebRequest.Create, что является довольно тривиальным видом строительства.

ProcessStartInfo и StringBuilder оба являются разумными примерами простого "одного строителя".

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