Подтвердить что ты не робот

Примеры функциональных или динамических методов, которые могут заменить объектно-ориентированные шаблоны проектирования

Это несколько связано с Заменяет ли функциональное программирование шаблоны дизайна GoF?

С момента появления лямбда и динамики в С# существуют ли какие-либо стандартные шаблоны проектирования, которые можно считать устаревшими или решенными каким-либо другим способом с использованием lambdas или других языковых функций?

Например, динамические функции С# теперь могут использоваться для выполнения нескольких методов. http://achoiusa.wordpress.com/2009/08/27/exploring-c-4-0-multimethods/ (Я думаю, что у Марка Гравелла было какое-то сообщение об этом?)

Лично я склонен делать фабрики, используя Func of T nowdays.

например.

public static class SomeFactory
{
     public static Func<IUnitOfWork> GetUoW = 
       () => new EF4UoW(new SomeModelContainer());
}

// usage

var uow = SomeFactory.GetUoW();

// testabillity

var testUoW = new InMemUoW();
testUoW.Add(new Customer()...);

SomeFactory.GetUoW = () => testUoW;

// the service can get an UoW using the factory
var result = SomeDomainService.DoStuff(...); 

У кого-нибудь есть другие примеры?

[Изменить] Конечно, шаблоны не устаревают сами по себе, но некоторые шаблоны являются специфическими для парадигмы, и поэтому, поскольку С# теперь является мультипарадигмой, некоторые функциональные свойства С# могут сделать некоторые из рисунков ООП менее привлекательными.

4b9b3361

Ответ 1

Образцы дизайна не устаревают только потому, что развивается один язык. Шаблоны обычно являются языковыми-агностиками.

В некотором смысле вы могли бы сказать, что .NET сделал шаблон Observer устаревшим уже в .NET 1.0. Однако это не совсем корректно, потому что шаблон не устарел. Структура просто предоставляет стандартную реализацию шаблона, что означает, что вы редко должны реализовывать его самостоятельно.

В том же смысле вы можете сказать, что делегаты - это просто анонимные интерфейсы, поэтому Func<T> является Аннотация Factory.

Шаблоны не исчезают только потому, что язык предоставляет идиоматическую поддержку для них.

Ответ 2

Примеры некоторых шаблонов, которые предоставляются как часть .net или С#, которые явно не реализованы программистом. Я предоставляю ответ в отношении .net в целом и не специфичен для С#

  • Итерационные шаблоны: с помощью разработчика List < > или Collection < > разработчик получает реализацию IEnumerable по умолчанию. Таким образом, явная реализация не требуется. Но, сказав это, есть кто-то (в данном случае,.net framework), который реализует шаблон для разработчика.

OOAD Шаблоны проектирования не устаревают, но разработчик не должен знать реализацию для использования таких шаблонов.

  • Object.Clone() - еще один пример - прототипирование. Разработчик должен просто реализовать мелкую или глубокую копию на основе этого требования. Но .net framework гарантирует поддержку шаблона прототипа.

  • Decorator - с помощью XAML вы можете украсить элемент пользовательского интерфейса с дополнительными обязанностями. Текстовое поле может быть украшено цветом, шириной и т.д.

  • Туннелирование и барботирование событий - пример шаблона Chain или ответственности

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

Ответ 4

Конечно, очевидным будет шаблон стратегии, который также может быть выполнен с помощью функции более высокого порядка.