这是BaseBeen的反模式吗?

时间:2012-11-05 09:59:41

标签: c# .net design-patterns anti-patterns

我有一个带有ConsoleApp类的实用程序库,它只有像GetIntValue(字符串名称)这样的静态方法,要求用户输入带有指定名称的参数的整数值,或者用于解析命令行参数的函数。

至于我,ConsoleApp是一个实用工具类,并继承它只是为了避免“ConsoleApp”。在代码中看起来像BaseBeen反模式。

但另一方面,ConsoleApp只会由真正的控制台应用程序类继承,这样就不会是BaseBeen。

那么,它真的是BaseBeen吗?

1 个答案:

答案 0 :(得分:1)

SOLID设计原则(特别是SRP,O / CP和DIP)表明您更好通过委派(例如策略模式)提供该功能。 Has-A比Is-A等更好。

但是,你在这里遇到了第一世界问题,因为Program.cs非常依赖于代码库的瞬态结束。显然,您可能需要在引导程序运行之前解析一些命令行参数(例如,配置引导程序!),因此您可能会发现注入某种值提供程序很有挑战性。

所以,我会说是的,它是反模式,但可能有更重要的事情要担心

参见例如http://s3.amazonaws.com/hanselminutes/hanselminutes_0145.pdf第8页,鲍勃叔叔谈论DIP: -

  

“主要是我们最具体的   函数,它将创建我们的所有实例和所有实例   工厂......然后它会   交给抽象部分...和   抽象核心将操纵它,好像它在这个幻想中   一切都是抽象的世界。“

如果Main必须调用一些静态方法,那没关系。如果你想从实用程序类继承以使它更容易,那可能会有点气味,但我并不在乎。只要确保你知道边界在哪里。如果您在Main之外使用静态实用程序类,那么您可能会遇到问题。