可替代面向对象设计模式的功能或动态技术示例

Rog*_*son 13 c# lambda design-patterns functional-programming dynamic

这与函数式编程取代GoF设计模式有些关系吗?

自从在C#中引入lambdas和动态,是否有任何标准设计模式可以被认为是过时的或使用lambdas或其他语言特性以其他方式解决?

例如,C#的动态功能现在可用于执行多种方法. http://achoiusa.wordpress.com/2009/08/27/exploring-c-4-0-multimethods/ (我想Marc Gravell有一些关于此的帖子?)

就个人而言,我倾向于使用现在的Func of Tn来做工厂.

例如

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(...); 
Run Code Online (Sandbox Code Playgroud)

有人有其他例子吗?

[编辑]当然,模式本身并不过时,但有些模式是范式特定的,因此C#现在是多范式,C#的一些功能属性可能会使一些OOP模式缺乏吸引力.

Mar*_*ann 8

设计模式不会因为单一语言的发展而过时.模式通常与语言无关.

从某种意义上说,你可以说.NET 已经在.NET 1.0中使Observer模式"过时"了.但是,这并不是真的正确,因为模式没有过时 - 框架只提供了模式的默认实现,这意味着您很少需要自己实现它.

在同样的意义上,你可以说委托只是匿名接口,所以a Func<T> 一个抽象工厂.

模式不会因为一种语言为它们提供惯用支持而消失.