3

と呼ばれるクラスを含む別のサードパーティ コンポーネントを .net プロジェクトに追加したClientところ、一般的なクラス名について考えさせられました。

public クラスに のように一般的な名前を付けてClientいますか? それとも、名前をより具体的にしようとしていますか?

Client以前は、名前空間 ( ) を介して常に明示的にアクセスできるため、問題ないと言っていたでしょうがCompany.Product.Client、MS は .net フレームワークのよりわかりやすいクラス名 ( 、 、 など) に固執しているWebClientようTcpClientですSmtpClient

MessagePub.Clientのような名前は非常にきれいに見えると思いますMessagePub.MessagePubClientが、多くClientの が浮かんでいると、かなり面倒に感じます。

私が使用しているこれらのサードパーティ コンポーネントはすべて実際にはオープン ソースであるため、コードを読みやすくするためにクラス名をリファクタリングしてよりわかりやすい名前に変更することをお勧めしますか、それとも名前空間を介してアクセスする方がよい考えですか? それとも、それは問題ではありませんか?:-)

4

7 に答える 7

5

ほとんどの場合、よりわかりやすい名前の方が良いと思います。これは単なる技術的な問題ではなく、確かにセマンティックな問題でもあります。1 つは、どのような種類のクラスを正確に扱っているかを考える必要があり、境界を設定するのに役立ちます。

于 2009-05-24T17:37:32.503 に答える
5

類似/同一の名前を使用するサードパーティのライブラリを処理する必要がある場合は、名前空間エイリアス量指定子を忘れないでください。

using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;

そのように、さまざまなクラスを簡単に区別できます。

Excel.Application excelApp = new Excel.Application();
Word.Application wordApp = new Word.Application();
于 2009-05-24T18:07:00.833 に答える
3

識別子が名前空間によって明確にされている場合、さらにノイズを追加する必要があるとは思えません。おっしゃるとおり、モヤモヤした感じです。

たとえば、MessagePub.Clientメッセージ ダイジェストのみを必要とするものや、他のインターフェイス用のメッセージ アダプタなど、複数の種類の を使用できる場合は、もちろんそれを明確にする必要があります。おそらくMessagePub.DefaultClient、一般的なケース、MessagePub.DigestClientダイジェスト コンシューマー、またはMessagePub.LogAdaptorClientメッセージ アダプターの場合

于 2009-05-24T17:29:47.537 に答える
1

よりわかりやすい名前の方がはるかに優れています...次のようなステートメントを使用して誰かに資金を提供するためです。

using Company.Product;
using SomeOtherThing.Product;

...Client両方の名前空間に表示される場合は、読み取り不能なコードがあります。

ClientProductUserPerson、などの一般的なオブジェクト名Message...ほとんどの場合、より大きな目的を反映する識別子を前に付けます。

于 2009-05-24T17:45:17.030 に答える
0

クライアントは悪い名前です、それは正確には何のクライアントですか?MailClient、MicrowaveClient、TelephoneClientなどの化合物と言えます。

于 2011-02-02T12:55:03.380 に答える
0

クラスがより具体的であるほど、それが持つべきより具体的な名前になります - それが DoesNotGetUnnecessaryLongAndUnhandy であることを考慮してください。

もちろん、名前空間は名前を区別し、コードに説明力を加える優れた方法です。ただし、名前を変更するためだけにリファクタリングすることはしません。

于 2009-05-24T17:34:36.657 に答える
0

public クラスに Client と同じくらい一般的な名前を付けていますか? それとも、より具体的な名前にしようとしていますか?

私は2つのことをしようとしています:

  1. 私のクラスは2 つと同じ名前を持っていません (ただし、私のクラス名がサードパーティのものと衝突するかどうかは気にしません。それが名前空間の目的です)。

  2. 私のクラスは、Microsoft System クラスのいずれかと同じ名前を持つことはほとんどありません (たとえば、Dictionaryorという名前のクラスは作成しません)。Form

于 2009-05-24T18:05:49.633 に答える