【发布时间】:2023-03-11 19:25:01
【问题描述】:
目前,我经常遇到遵循以下代码所示模式的代码。这是一种策略模式。
我不喜欢这个,感觉有点臭。它打破了实际的策略模式,并且额外的间接性令人困惑。此外,它通常会导致与示例中类似的方法,因为派生类中方法的目的与基类中的方法非常相似。另一方面,我无法用手指指向问题核心。
我是唯一一个发现这个问题的人吗?如果不是,这段代码会导致什么问题,尤其是在 SOLID 原则方面?
namespace MyTest
{
abstract class Base
{
public void DoSomething()
{
var param = Prepare();
DoItReally(param);
}
private string Prepare()
{
return "Hallo Welt";
}
protected abstract void DoItReally(string param);
}
class DerivedOne : Base
{
protected override void DoItReally(string param)
{
Console.WriteLine(param);
}
}
class DerivedTwo : Base
{
protected override void DoItReally(string param)
{
Console.WriteLine(param.ToUpper());
}
}
static class Program
{
public static void Main(string[] args)
{
Base strategy = new DerivedOne();
strategy.DoSomething();
strategy = new DerivedTwo();
strategy.DoSomething();
}
}
}
【问题讨论】:
-
您应该更少担心模式,而更多地关注您真正想要做什么以及 那个 是否有意义、可读性和可维护性.
-
正如迈克尔所说。设计模式可帮助您以优雅且可维护的方式实施解决方案,但您必须首先了解您要解决的问题并选择最适合该问题的设计模式。
-
您的困惑可能源于这样一个事实,即这不是策略模式的应用,而是模板方法模式的应用。当然,是否适合使用取决于。
-
我从中得到的是,您可能担心
DoItReally的实现中的代码重复。是的,在这个例子中它可以被改进。 但是:这是否适用于实际代码(不仅仅是示例)?它有实质性的好处吗?
标签: c# oop design-patterns solid-principles anti-patterns