Есть ли какие-либо шаблоны проектирования, используемые в .NET Framework? - PullRequest
26 голосов
/ 22 августа 2009

Я хотел бы знать: используются ли какие-либо GoF шаблоны проектирования в .NET Framework ?

BOUNTY:

Я видел ссылку MSDN ниже в ответе. Есть ли какие-либо посты / видео или вы можете перечислить шаблоны и, самое главное, ГДЕ они используются?

Ответы [ 7 ]

40 голосов
/ 02 сентября 2009

.NET Framework использует много шаблонов Банды Четырех. Вот лишь несколько примеров:

Образы творчества

  • Абстрактная фабрика : System.Data.Common.DbProviderFactory. Каждая функция-член этого класса является фабричным методом.
  • Строитель : Инфраструктура строительства канала WCF.
  • Заводской метод :
    • System.Data.IDbConnection.BeginTransaction(). Тип создаваемой транзакции зависит от базовой реализации IDbConnection.
    • WebRequest.Create() возвращает конкретный тип, который зависит от схемы URL.
  • Прототип - используется в фреймворке для клонирования и сериализации
  • Singleton - используется в качестве метода активации в WCF, то есть веб-служба может рассматриваться инфраструктурой WCF как одноэлементная. То же самое для .NET Remoting.

Структурные узоры

  • Адаптер : поставщики ADO.NET, например, System.Data.SqlClient.SqlConnection, System.Data.OleDb.OleDbConnection и т. Д. Каждый поставщик является адаптером для определенной базы данных.
  • Composite : много примеров
    • System.Windows.Forms.Control и его производные классы.
    • System.Web.UI.Control и его производные классы.
    • System.Xml.XmlNode и его производные классы.
  • декоратор :
    • System.Windows.Controls.Decorator (в WPF).
    • Некоторые реализации Stream являются декораторами вокруг внутреннего потока (например, GZipStream, CryptoStream).
  • Фасад : System.Xml.Serialization.XmlSerializer. XmlSerializer скрывает сложную задачу (которая включает генерацию сборок на лету!) За очень простым в использовании классом.
  • Прокси : прокси веб-службы, сгенерированные svcutil.exe и полученные из System.ServiceModel.ClientBase<TChannel>

Поведенческие паттерны

  • Цепочка ответственности : System.Web.UI.Control.OnBubbleEvent() и System.Web.UI.Control.RaiseBubbleEvent().
  • Команда : System.Windows.Input.ICommand (в WPF).
  • Переводчик : System.Linq.Expressions.Expression и связанные с ним классы.
  • Итератор : много примеров
    • System.Collections.IEnumerable.
    • System.Collections.Generic.IEnumerable<T>.
    • System.Data.IDataReader.
  • Памятка : .NET Сериализуемый шаблон представляет собой вариант шаблона Memento .
  • Наблюдатель - Механизм событий .NET.
  • Стратегия - Метод сортировки в ArrayList
  • Шаблонный метод - Метод визуализации для пользовательских элементов управления
  • Посетитель : System.Linq.Expressions.ExpressionVisitor ( используется внутри [LINQ] )
22 голосов
/ 22 августа 2009

Вот статья, в которой обсуждается именно эта тема:

http://msdn.microsoft.com/en-us/magazine/cc188707.aspx

И теперь шаблон MVC можно добавить с помощью ASP.NET MVC. :)

РЕДАКТИРОВАТЬ: Поскольку ваше редактирование / запрос дополнительной информации:

Вот статья, в которой перечислены несколько шаблонов и где они используются в фреймворке. http://www.jot.fm/issues/issue_2006_11/article1.pdf

Поставщики в .NET - это все модели модели поставщиков. http://msdn.microsoft.com/en-us/library/aa479030.aspx

Шаблоны провайдеров в .NET также используют шаблон стратегий.

Заводской шаблон используется в нескольких местах, и вот пример, где он используется в ASP.NET. http://msdn.microsoft.com/en-us/library/ms954600.aspx

Вот трансляция на DP в .NET: http://msevents.microsoft.com/cui/WebCastEventDetails.aspx?culture=en-US&EventID=1032293567&CountryCode=US

Я не смотрел его, поэтому я не уверен, как много он вкладывает в то, как они используются в Framework ...

Как уже упоминалось в комментарии, шаблоны GoF, вероятно, все используются в .NET Framework. Где не совсем просто ответить, так как фреймворк огромен, и если MS не публикует как таковой, перечисленные в некоторых примерах, это не всегда очевидно. Чем более знаком с шаблоном, тем более вероятно, что вы заметите класс фреймворка, который его использует.

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

Кроме того, http://www.dofactory.com/Framework/Framework.aspx имеет набор для продажи ($ 79-99), который посвящен обучению использованию / внедрению шаблонов GoF в .NET, НО они перечисляют в чтении и объясняют, где их использует MS. в рамках.

6 голосов
/ 27 августа 2009

Прочтите «Руководство по разработке структуры: соглашения, идиомы и шаблоны для многократно используемых библиотек .NET». Эта книга покажет вам реальные шаблоны проектирования, на которых был основан .NET.

4 голосов
/ 22 августа 2009

Определенно. Например, Шаблон фабрики используется в классах поставщиков данных ADO.NET. Шаблон Singleton используется в удаленном взаимодействии .NET. Шаблон утилизации используется в управлении ресурсами.

0 голосов
/ 11 декабря 2018

Да, в .Net framework BCL используется множество шаблонов проектирования. На самом деле это лучшее место для изучения использования шаблона проектирования в перспективе.

Шаблон: Реализация

Шаблон наблюдателя: реализовано в виде событий и делегатов

Шаблон декоратора: реализовано в классах System.IO Stream

Шаблон итератора: IEnumerable & Iterator

Шаблон стратегии: реализован в экспериментальных запросах от Linq до Lambda (list.Where (выражение))

Шаблон фабрики: в System.Net.WebRequest

Шаблон адаптера: TLB Import / RCW (Обертываемость во время выполнения)

Пожалуйста, проверьте это видео для подробной презентации по этой теме.

https://www.youtube.com/watch?v=riHGGYHVoaQ&list=PL2_Cl8E2bG36PGuBGesHFPVM1s6M02JmN

0 голосов
/ 29 августа 2009
  • System.Net.WebClient является примером шаблона фасада.
  • System.IO.Stream: классический асинхронный шаблон
  • System.ComponentModel.BackgroundWorker: асинхронный шаблон на основе событий
  • Как уже упоминалось: шаблон Dispose используется почти повсеместно в рамках
  • System.Control: Шаблон метода Pattern
0 голосов
/ 22 августа 2009

Методы BeginXXX и EndXXX в BCL основаны на шаблоне асинхронного завершения .

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