Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Паттерн Builder. Применение в .NET / 25 сообщений из 76, страница 1 из 4
02.11.2016, 11:50
    #39339740
.NET
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
Кто знает конкретные примеры применения паттерна Builder в .NET Framework?
Не самопальные абстрактные "собираем машину", "печём пиццу" и т. п., а применение в самой библиотеке .NET.
Похоже, что при построении запроса в LINQ, что-то подобное используется,
но мне не понятно где там конкретно Builder, ConcretBuilder и Director.
...
Рейтинг: 0 / 0
02.11.2016, 12:14
    #39339773
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
.NET,
в поделке Сережи Брина забанили?
http://stackoverflow.com/questions/1316743/are-there-any-design-patterns-used-in-the-net-framework
...
Рейтинг: 0 / 0
02.11.2016, 12:14
    #39339774
.NET
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
Похоже на Builder вот такое сочетание
Builder - System.IO.Stream
ConcretBuilder - System.IO.FileStream
Director - System.IO.StreamWriter

Но тут не совсем ясно, что является продуктом и как его извлечь из Builder.
...
Рейтинг: 0 / 0
02.11.2016, 12:24
    #39339785
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
...
Рейтинг: 0 / 0
02.11.2016, 12:26
    #39339789
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
.NETПохоже на Builder вот такое сочетание
Builder - System.IO.Stream
ConcretBuilder - System.IO.FileStream
Director - System.IO.StreamWriter

Но тут не совсем ясно, что является продуктом и как его извлечь из Builder.

Не. Строитель создаёт объект. Конкретный строитель создаёт конкретный объект. Директор использует строитель и не знает какой конкретный строитель используется.

Вот здесь очень хорошо описано:

http://andrey.moveax.ru/post/patterns-oop-creational-builder
...
Рейтинг: 0 / 0
02.11.2016, 12:29
    #39339797
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
.NET,

Еще есть модные fluent builder-ы
...
Рейтинг: 0 / 0
09.11.2016, 19:39
    #39344446
.NET
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
ЕвгенийВ.NET,
в поделке Сережи Брина забанили?
http://stackoverflow.com/questions/1316743/are-there-any-design-patterns-used-in-the-net-framework
По этой ссылке в одном из комментариев приводится полезный список
автор
Abstract Factory: System.Data.Common.DbProviderFactory. Every member function of this class is a factory method.
Builder: The WCF channel construction infrastructure.
Factory Method:
System.Data.IDbConnection.BeginTransaction(). The type of transaction created depends on the underlying IDbConnection implementation.
WebRequest.Create() returns a concrete type that depends on the URL scheme.
Prototype - used in framework for cloning and serialization
Singleton - used as an activation method in WCF, i.e. a web service may be treated as a singleton by the WCF infrastructure. Ditto for .NET Remoting.

Structural patterns

Adapter: The ADO.NET providers, eg System.Data.SqlClient.SqlConnection, System.Data.OleDb.OleDbConnection etc. Each provider is an adapter for its specific database.
Composite: many examples
System.Windows.Forms.Control and its derived classes.
System.Web.UI.Control and its derived classes.
System.Xml.XmlNode and its derived classes.
Decorator:
System.Windows.Controls.Decorator (in WPF).
Some implementations of Stream are decorators around an inner stream (e.g. GZipStream, CryptoStream).
Facade: System.Xml.Serialization.XmlSerializer. XmlSerializer hides a complex task (that includes generating assemblies on the fly!) behind a very easy-to-use class.
Proxy: The web service proxies generated by svcutil.exe and deriving from System.ServiceModel.ClientBase<TChannel>

Behavioral Patterns

Chain of responsibility: System.Web.UI.Control.OnBubbleEvent() and System.Web.UI.Control.RaiseBubbleEvent().
Command:System.Windows.Input.ICommand (in WPF).
Interpreter: System.Linq.Expressions.Expression and related classes.
Iterator: many examples
System.Collections.IEnumerable.
System.Collections.Generic.IEnumerable<T>.
System.Data.IDataReader.
Memento: The .NET Serializable pattern is a variation on the Memento pattern.
Observer - The .NET event mechanism.
Strategy - Sort method in ArrayList
Template Method - Render method for custom controls
Visitor : System.Linq.Expressions.ExpressionVisitor


Но тут ничего не говорится по паттерн Bridge.
Есть идеи где применяется Мост в .NET?
...
Рейтинг: 0 / 0
10.11.2016, 00:29
    #39344530
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
hVosttДиректор использует строитель и не знает какой конкретный строитель используется. Директор: Так, надо построить кирпичную стену. Эй, ты, будешь кирпичи класть!
Строитель: Я крановщик.
Директор: Ничего не знаю, клади, блеать!


Какой-то сомнительный паттерн.
Или описание.
...
Рейтинг: 0 / 0
10.11.2016, 05:50
    #39344545
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
Antonariy

Какой-то сомнительный паттерн.
Или описание.
Они почти все сомнительные. Нормальные или встроены в язык (энумератор) или реализованы в виде библиотек (прослушиватель) или часто используются, например из-за отсутствия двойной диспетчерезации (ждем c# 7.0) (посетитель).
...
Рейтинг: 0 / 0
10.11.2016, 06:20
    #39344548
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
Antonariy Директор: Так, надо построить кирпичную стену. Эй, ты, будешь кирпичи класть!
Строитель: Я крановщик.
Директор: Ничего не знаю, клади, блеать!


Какой-то сомнительный паттерн.
Или описание.

Для России самое то
...
Рейтинг: 0 / 0
10.11.2016, 06:21
    #39344549
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
ЕвгенийВОни почти все сомнительные.

Вы просто не умеете их готовить (с)
...
Рейтинг: 0 / 0
10.11.2016, 10:51
    #39344626
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
hVosttВот здесь очень хорошо описано:

http://andrey.moveax.ru/post/patterns-oop-creational-builder судя по описанию, этот паттерн нормально применим разве что в setup-проектах, где пошаговость и разнообразность объектов (форм настроек) и составляет суть проекта.

в прочие проекты его впендюривать смысла вообще нет, поскольку трудоемкость реализации объектов в разы превышает разницу между трудоемкостями реализации этого паттерна и какой-нибудь наколенки, решающей задачу пошаговости в лоб. он вообще не сокращает трудозатраты (в сферическом проекте пошаговых процессов раз-два и обчелся), а скорее всего даже увеличивает.
...
Рейтинг: 0 / 0
10.11.2016, 15:56
    #39345015
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
Antonariyсудя по описанию, этот паттерн нормально применим разве что в setup-проектах, где пошаговость и разнообразность объектов (форм настроек) и составляет суть проекта.

в прочие проекты его впендюривать смысла вообще нет, поскольку трудоемкость реализации объектов в разы превышает разницу между трудоемкостями реализации этого паттерна и какой-нибудь наколенки, решающей задачу пошаговости в лоб. он вообще не сокращает трудозатраты (в сферическом проекте пошаговых процессов раз-два и обчелся), а скорее всего даже увеличивает.

ЭЭмм.. Я не понимаю смысла «впендюривать», зачем что-то куда-то впендюривать? Паттерны придуманы не для того, чтобы их впендюривали или использовали только потому, что они есть. Они решают задачи. Трудозатраты они сокращают в том смысле, что ты не выдумываешь решение, а применяешь его. И другие люди, которые придут на проект, сразу поймут что это и как это работает, так как с паттернами все знакомы.

Строитель не редко используется в грамотно спроектированной системе.
...
Рейтинг: 0 / 0
11.11.2016, 17:50
    #39345855
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
hVosttЕвгенийВОни почти все сомнительные.

Вы просто не умеете их готовить (с)
Приведи 3 примера использования тобой паттернов в продакшене?
...
Рейтинг: 0 / 0
11.11.2016, 19:52
    #39345919
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
ЕвгенийВПриведи 3 примера использования тобой паттернов в продакшене?

Универсальные:

1. Отправка уведомлений IMessageBuilder, конкретный билдер зависит от настроек, это может быть email, push, sms, запись в лог, что угодно.

2. Создание документов IDocumentCreator, конкретный билдер зависит от мета-типа, и его настроек во внутренней системе документно-реестрового учёта.

Из предметно-конкретных:

3. Создание электронного паспорта энергетического обследования для выгрузки, валидации и передачи его третей стороне IEnergyPassportBuilder. Конкретный билдер зависит от версии паспорта и типа требуемого результата.

Просил 3, получи. На деле их намного больше. Да, не все паттерны одинаково популярны, но совсем бесполезных нет, вы просто не умеете их готовить.
...
Рейтинг: 0 / 0
11.11.2016, 20:05
    #39345924
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
Antonariyрешающей задачу пошаговости

Вот кстати один из камней преткновения, затрудняющий понимание паттерна. Конструирование объекта может представлять собой процесс более сложный, чем установка значений свойств. И это отличная точка безболезненного расширения и оптимизации, которую многие не понимают, или понимают не до конца.
...
Рейтинг: 0 / 0
11.11.2016, 21:25
    #39345949
ЕвгенийВ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
hVostt,
Более подробно можно хоть 1 пример? А то на первый взгляд ты натягивал голошу на тыкву....
...
Рейтинг: 0 / 0
11.11.2016, 23:00
    #39345971
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
ЕвгенийВhVostt,
Более подробно можно хоть 1 пример? А то на первый взгляд ты натягивал голошу на тыкву....


Ты спросил про 3 примера использования в продакшене, я ответил. Что теперь тебя смущает? Можешь пояснить свою мысль? А то у нас дискуссия в одни ворота получается по принципу "не ве-е-рю!". Давай как-то конструктивней что ли.

Подробные примеры можно легко найти в опен сорсе, например, в Quartz этот паттерн активно применяется.
...
Рейтинг: 0 / 0
12.11.2016, 11:28
    #39346056
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
Antonariy Директор: Так, надо построить кирпичную стену. Эй, ты, будешь кирпичи класть!
Строитель: Я крановщик.
Директор: Ничего не знаю, клади, блеать!

как раз директор не знает из чего конкретная стена будет строиться, о кирпичах он ничего не знает.
не получится крановщика прислать вместо каменщика - интерфейсы несовместимы
...
Рейтинг: 0 / 0
12.11.2016, 17:49
    #39346125
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
Изопропил,

Директор ещё не знает какой национальности будет строитель
...
Рейтинг: 0 / 0
12.11.2016, 20:11
    #39346173
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
hVosttИзопропил,

Директор ещё не знает какой национальности будет строитель
и не должен узнать даже в процессе строттельства
...
Рейтинг: 0 / 0
15.11.2016, 09:58
    #39347304
Смузи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
hVosttПодробные примеры можно легко найти в опен сорсе, например, в Quartz этот паттерн активно применяется.
Больше фундаментализма - Entity Framework, NHibernate.
...
Рейтинг: 0 / 0
15.11.2016, 15:10
    #39347625
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
СмузиhVosttПодробные примеры можно легко найти в опен сорсе, например, в Quartz этот паттерн активно применяется.
Больше фундаментализма - Entity Framework, NHibernate.

Примеры можно приводить бесконечно, даже если очень захочется, отказаться от применения этого паттерна будет сложно. Зачастую толпы программистов даже понятия не имеют, что применяют тот или иной паттерн. Проблема возникает, когда программист начинает на паттерны смотреть под углом «А как же мне его применить и впендючить в проект, это должно быть очень круто?!» :)
...
Рейтинг: 0 / 0
15.11.2016, 15:15
    #39347628
Смузи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
hVosttПроблема возникает, когда программист начинает на паттерны смотреть под углом «А как же мне его применить и впендючить в проект, это должно быть очень круто?!» :)
Что касается данного паттерна, для себя сделал вывод - удел фреймворков и прочих коробок. Флюент упрощает разобраться в хаосе настроек. В качестве прикладного подхода несъедобно и, возможно, вредно.
...
Рейтинг: 0 / 0
15.11.2016, 15:41
    #39347655
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Паттерн Builder. Применение в .NET
СмузиЧто касается данного паттерна, для себя сделал вывод - удел фреймворков и прочих коробок. Флюент упрощает разобраться в хаосе настроек. В качестве прикладного подхода несъедобно и, возможно, вредно.

Если не очень сложно, можешь пояснить на основе чего сделаны такие выводы?

Второй вопрос, если:

— создание объекта сложнее, чем параметры его конструктора
— создание объекта требует доступа к некоторым зависимостям, которых не должно быть непосредственно у Директора
— код, который создаёт объект (Директор), не знает какой конкретно объект он создаёт (знает только базовый тип) и знает параметры, нужные для его создания
— создание объекта может иметь сложные эффекты (например, создание объекта провоцирует создание также других объектов, необходимых для дальнейшей его жизнедеятельности)
— создание объекта может провалиться из-за нарушения бизнес-правил, но это не является исключительной ситуацией
— создание объекта подразумевает предварительно наполнение данными (самый яркий пример — заказ, это объект, но у него может быть большое количество товаров, подключенные программы лояльности, после создания заказ остаётся неизменным до конца жизни)

как будешь выкручиваться?

Мне кажется, я могу ещё раз повторить, вы просто не умеете его готовить
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Паттерн Builder. Применение в .NET / 25 сообщений из 76, страница 1 из 4
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]