-1

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

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

但另一方面,ConsoleApp 只会被真正是 Console 应用程序的类继承,这样,它就不是 BaseBeen。

那么,它真的是 BaseBeen 吗?

4

1 回答 1

1

SOLID 设计原则(尤其是 SRP、O/CP 和 DIP)建议您最好通过委托(例如策略模式)提供该功能。Has-A 比 Is-A 好,等等。

但是,您在这里非常直接地处于第一世界问题的领域,因为 Program.cs 非常位于您的代码库的瞬态端。显然,您可能需要在引导程序运行之前解析一些命令行参数(例如配置引导程序!),因此您可能会发现注入某种值提供程序具有挑战性。

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

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

“Main 是我们最具体的功能,它将创建我们所有的实例和所有工厂……然后它会移交给抽象部分……抽象核心将像在这个幻想世界,一切都是抽象的。”

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

于 2012-11-05T10:22:55.820 回答