gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:09:50 24 4
gpt4 key购买 nike

这与Does functional programming replace GoF design patterns?有些相关

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

比如现在可以利用C#的动态特性来做multi method。 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 模式不那么有吸引力。

最佳答案

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

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

在同样的意义上你可以说delegates are just anonymous interfaces , 所以 Func<T> 一个抽象工厂

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

关于c# - 可以替代面向对象设计模式的功能或动态技术示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5646138/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com