74

私は一般的に、グローバル変数/関数は悪であり、コードのすべての部分はそれが関係するクラスに存在する必要があるという規則に従っています。

これは非常に簡単なルールであり、これまでこのルールで問題が発生したことはないと思います。

ただし、今日は、特定のクラスではなく、アセンブリに関数を追加する必要があります。つまり、ほとんどすべてのクラスでこの特定の機能を使用できます。

この関数をどこに置くべきですか(+1オーバーロード)?

「ユーティリティ」クラスに入れると汚い感じがします。半関連のクラスに付け加えて、他のクラスに直接呼ばせてみると、気分が悪くなります。

この特定のコードは、基本的IList<PointF>に正規化されたリストに切り刻まれます。私は今、それを拡張メソッドとして追加するIList<PointF>のが最善の策かもしれないと感じています...

4

3 に答える 3

35

これが に対する操作である場合は、IList<PointF>に対する拡張メソッドである必要がありますIList<PointF>

一般にUtilsHelper型クラスは避けるべきです。多くの場合、ユーティリティ メソッドと思われるものは、実際には、おそらくそれ自体のクラスに属する特定のメソッドであることがわかります(あなたが言うように)。Utilただし、 のようなクラス (関連する有用なメソッドをグループ化したクラス) が有効なエンティティであるドメイン固有のケースがあります。

于 2010-07-27T00:30:06.357 に答える
13

「グローバル」変数とメソッドに問題はありません。あなたはいつもそれらを使っています。フレームワークは、それらを「静的」クラスまたは「静的」メソッドと呼びます。

必要になることはめったにありませんが、通常、C# にはメソッド/変数、VB.NET にはモジュールが必要な名前空間に内部静的クラス Util を追加します。

.NET Framework のサンプル

  • System.Collections.Specialized.CollectionsUtil
  • System.Net.WebUtility
  • Microsoft の .NET Framework のソース コードを確認してください。多数の内部ユーティリティ クラスがあります。
于 2010-07-27T00:41:20.697 に答える
4

もちろん、「ListUtilities」またはPointListUtilitiesクラスに配置する必要があります。そうすれば、包括的な「ユーティリティ」クラスの主な問題である単一責任の原則を破ることはありません。

于 2010-07-27T00:29:35.383 に答える