多くのusing / importステートメントがあるのは、デザインやコードの悪臭を示していますか?


13

通常、クラスファイルの先頭にいくつかのusingステートメントが表示されます。例:

using System.Collections.Generic;
using System.IO;
using System.Xml.Linq;

しかし、私が取り組んでいるプロジェクトでは、いくつかの機会に、1つのクラスファイルで20以上の使用/インポートが見られます。これは悪いデザインですか?1つのことを行うために設計されたクラスは、少数のコンポーネントにのみ依存する必要があるようです。


1
Visual Studioには、未使用のusingステートメントを削除するオプションがあります。これらの20個のうち実際に使用されている数を確認することができます。
ダンピチェルマン

@Dan -ReSharperを使用して未使用のものを取り除くため、すべて使用中です。
ジョンレイナー

IoCの追加、コンストラクター注入への変換、および/またはいくつかの統合ポイントをインラインラムダに変換してusing、クラスの数を増やすことなくステートメントの数を減らすかどうかを試してみましたか?クラスまたはソースファイルの数が増えると、ソースコード管理のオーバーヘッドが増えることに注意してください。
-rwong

2
IoCは問題を隠すだけです。
-Telastyn

1
Collections.GenericやLINQのように、それらの一部は、言語とそれが推奨するプログラミングスタイルの一部にすぎないため、必ずしもそれらについて心配する必要はありません。おそらく他の人に注意を向けるでしょう。ほとんどのクラスは、おそらくIOを直接行う必要はないはずです。したがって、どこかで責任が混同したり、不十分な階層化が見つかった場合は、おそらくアプリケーションに依存します。
エリックエイド

回答:


21

悪いデザインを示している可能性があります。あなたが見ているクラスがあまりにも多くのことをしているかもしれませんが、インポートしている名前空間は、名前空間の分離が意味するよりも本当に結合していることを意味するかもしれません。それは過剰なエンジニアや過剰な抽象化によるものかもしれませんが、使用とうまく調和しない設計であるかもしれません。

とはいえ、それは臭いです-時にはそれはあなたを悪い何かに導き、時にはそれは単なる誤報です。


本当の「コード臭」は、インポートされた名前空間がすべて、またはほとんど、目的が大きく異なる場合だろうと思います。正直に言うと、1 usingつのC#ファイルに6〜8個以上含まれることはめったにありません。
グレッグブルクハート

2
「コードのにおい」という用語を正しく使用するために、できれば2番目の+1を提供したいと思います。
ヨルグWミットタグ

!@Greg-同意します。通常、「用途」は関連しています。この場合、約15〜20の「用途」がアプリケーションの名前空間に由来し、残りは.netフレームワークに由来するため、抽象化の場合だと思います。
ジョンレイナー

2

クラスは、目的の機能を提供するために必要なものより大きくも小さくもないはずです。

1つのアプリケーションには、データを暗号化するという1つのジョブを持つ暗号化クラスがあります。コア機能、ロギング、および例外処理の間で、この1つのジョブを実行するには、環境に11の異なるネームスペースインポートが必要です。

「輸入を最小限に抑える」と自分で言うのは難しいです。または、インポートされた名前空間の数を数えるだけでクラスの成功を判断します。クラスの成功を示すものとして、これを単独で正当に使用することはできません。私にとって、「輸入」は授業の最後の手段です。クラスのジョブが明確に定義されている場合、インポートを含むサポートシステム内の他のすべてが処理されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.