6

たとえば、履歴書を解析するための 2 つのクラスがあり、1 つは Excel を解析し、もう 1 つは HTML を解析します。私の同僚が好んで行うのは、これら 2 つのクラスに同じ名前を付けて、以下に示すように異なる名前空間に配置することです。

namespace XX.ResumeParsers.Excel
class ResumeParser{}

namespace XX.ResumeParsers.Html
class ResumeParser{}

クラスの名前を変更し、それらを 1 つの名前空間に配置することをお勧めします (ただし、必要に応じて別のファイルに配置します)。

//in Excel folder under ResumeParsers folder
namespace XX.ResumeParsers
class ExcelResumeParser{}

//in Html folder under ResumeParsers folder
namespace XX.ResumeParsers
class HtmlResumeParser{}

したがって、階層はまだフォルダーに存在しますが、名前空間は同じです (フォルダー階層と正確に一致しません)。それでよろしいですか?

私が正しければ、同僚を説得する方法はありますか? または、ソリューションに重大な欠点はありますか?

ありがとう。

4

5 に答える 5

8

通常は良い考えではありません。特に、同じコードから両方のクラスを使用する必要がある場合はそうです。それらが異なる名前空間にあるべきかどうかは別の決定ですが、名前空間にコンテキストを伝達させようとする代わりに、私は間違いなくそれらHtmlResumeParserを呼び出します。ExcelResumeParserコードを読むときに、何について話しているのかを正確に判断することがはるかに簡単になります。

于 2010-09-14T08:57:07.460 に答える
3

同様の例を含む大規模なコードベースで作業した経験から、2番目のオプションは読みやすさの点ではるかに優れていることがわかります。私の場合、逆の方法でそれを行うことを選択したプログラマーを手に入れたいと思います:)。

一般に、コードを書いている人にとっては、どのクラスが使用されているのか、なぜ使用されているのかは常に明らかですが、それを読んでいる人のことを考えてみると、一目でどのパーサーがコードで使用されているかがわかりますか?

同じメソッドで両方のクラスが必要な場合もあります-ジョンはすでにそれについて言及しました-その場合、競合が発生し、完全な名前空間を使用する必要があります-これは苦痛です. そして、あなたがそうでないと知っていたとしても、将来誰かがそうしなければならないかもしれません。そして、おそらくあなたも手に入れたいと思うでしょう:)。

于 2010-09-14T09:06:12.693 に答える
1

特定のコードが両方ではなくどちらか一方を使用し、2 つが別々のアセンブリに実装されていれば、おそらく問題ないと思います。それらが同じアセンブリにある場合、または 1 つのクラスで両方を使用する場合は、個別のクラス名を使用することをお勧めします。

于 2010-09-14T09:06:18.517 に答える
1

ここに絶対的な正解はありませんが、同様のクラスを同じ名前空間に配置することは良い考えのようです。

フレームワークの同様の例としてStreamReaderとを見ることができます。StringReaderどちらも同じインターフェース ( TextReader) を実装しており、クラスがメモリ内の文字列から読み取るときに実際の I/O を実行していなくても、両方ともSystem.IO名前空間内にあります。StringReader

クラスを同じ名前空間に配置するかどうかに関係なく、クラス名を一意にするようにしてください。同じファイルに両方のクラスが必要になった場合、常に完全な名前空間を指定しなければならないのは面倒です。

于 2010-09-14T09:04:44.853 に答える
0

パーサーに 1 つの基本インターフェースといくつかの特定のヘルパー クラスがあるが、基本インターフェースでのみ使用される場合は、最初の解決策 (異なる名前空間) が最適です。なぜなら:

  • 異なるアセンブリに分割可能
  • 他のパーサーから独立した各パーサー
于 2010-09-14T08:56:55.307 に答える