【发布时间】:2011-08-04 12:08:32
【问题描述】:
这和Does functional programming replace GoF design patterns?有点关系
自从在 C# 中引入 lambda 和动态后,是否有任何标准设计模式可以被认为已过时或使用 lambda 或其他语言特性以其他方式解决?
例如,C# 的动态特性现在可以用来做多方法。 http://achoiusa.wordpress.com/2009/08/27/exploring-c-4-0-multimethods/ (我认为 Marc Gravell 有一些关于此的帖子?)
我个人现在倾向于使用 Func of T 来做工厂。
例如
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(...);
还有其他例子吗?
[编辑] 当然,这些模式本身并没有过时,但有些模式是特定于范式的,因此由于 C# 现在是多范式,C# 的一些功能特性可能会降低一些 OOP 模式的吸引力。
【问题讨论】:
标签: c# design-patterns dynamic lambda functional-programming