-1

クラス ConsoleApp を含むユーティリティ ライブラリがあります。これには、GetIntValue(string name) のような静的メソッドのみがあり、指定された名前のパラメーターの整数値を入力するようにユーザーに要求するか、コマンド ライン パラメーターを解析する関数があります。

私にとって、ConsoleApp はユーティリティ クラスであり、「ConsoleApp」を回避するためだけに継承しています。コードでは BaseBeen アンチパターンのように見えます。

しかし一方で、ConsoleApp は実際にはコンソール アプリケーションであるクラスによってのみ継承されます。このように、これは 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の外部で静的ユーティリティクラスを使用している場合は、問題が発生する可能性があります。

于 2012-11-05T10:22:55.820 に答える