クラスとネイティブクラスの名前の類似をどのように回避しますか?[閉まっている]


9

私は「興味深い問題」に出くわしました。

私はシステムを開発しており、多くの理由(つまり、抽象化、テクノロジーの独立性など)のために、情報を交換するための独自のタイプを作成しています。

たとえば、SendEmailと呼ばれ、ビジネスロジックによって呼び出されるメソッドがある場合、その方法には、OurCompany.EMailMessageタイプのパラメーターが含まれます。インスタンス、情報なし、ヘッドエンコード)。

SendEmail関数内で、この情報をEMailMEssageオブジェクトから取得し、MailMessage(これは技術固有のものです)オブジェクトを作成して、ネットワーク経由で送信できるようにします。

すでにお気づきのとおり、このクラスの名前は「ネイティブ」言語クラスとよく似ています。問題は、これがまさにメールメッセージであるため、それらに意味のある別の名前を見つけるのが難しいことです。

この問題は頻繁にありますか?どのように管理しますか?

編集:@mgkrebbsは、完全修飾名の使用についてコメントしました。これは私たちの現在のアプローチですが、少し冗長すぎます。できれば、もっときれいなものをお願いします。


2
少し冗長である場合、常に資格を使用することは実行可能な解決策のようです。一方のタイプにはOurCompany.EMailMessageを使用し、もう一方のタイプにはSendEmailClass.EMailMessage(またはその他)を使用します。このアプローチを取ることに問題がありますか?
mgkrebbs

はい、考えましたが、冗長になります。「よりクリーンな」ものが欲しいのですが、あなたが提案した解決策は私の現在の解決策です。これを説明に追加します
JSBach

3
名前は文脈の中にあります。通常、名前空間などです。だからそれは問題ではないはずです。
deadalnix、

+1、この質問が好きです。私は7年ほど前にこの質問を講師に尋ねたところ、彼は私が完全な「....」だと思った:)
NoChance

どの言語を使用していますか?答えは言語固有です。一般に、答えは「名前空間を使用する」です。単一のJavaアプリケーションでは、6つ以上のライブラリが同じクラス名を使用するのが一般的です。
kevin cline

回答:


3

これは、プロジェクトで使用する名前空間に関する問題です。

基本的に名前空間は、すべてのクラスおよび/またはプロジェクトで使用するすべてのクラス(通常、言語/コンパイラ/ IDEで提供される標準クラスを含む)によって提供されるキーワードのコレクションです。

名前空間はコレクションであるため、基本的にいくつかのルールが適用され、関連する動作なしで用語の混乱を防ぐことができます。また、C#などの一部の言語では、通常のように独自の名前空間を定義して、他のクラスでも使用できます。

名前空間を言語の基本的なキーワードと混同しないでください。どちらもキーワードのコレクションですが、両者の大きな違いがあります。名前空間は変更できますが、通常は言語の基本的なキーワードは変更できません。プロジェクトで使用した名前空間と使用する言語の基本的なキーワードの合計により、キーワードの総数がわかります。

このトピックはネットで頻繁に議論されています。「名前空間[あなたの言語]」という用語を使用した基本的な検索を提案できます。異なる言語に対して異なるアプローチを取ることができるという理由だけで、私は直接あなたの質問に答えていません。


3

さて、私の古い開発チームは、カスタマイズされた各クラスにアプリケーションの頭字語を追加するために使用していました。たとえばABCEmailクラスがありました。

名前空間に依存するよりも簡単だと思いますが、名前空間の使用法を補完するソリューションにもなります。

最後に重要なことですが、新しいオブジェクトを作成しているので、ネイティブオブジェクトがニーズに応えないため、電子メールファイルの名前はCustomizedEmailAdvancedEmail ... etcになります。


1
あなたの最後の点に同意しましたが、なぜOAEmailより良いのOurApplication.Emailでしょうか?ソフトウェアのすべての部分にOAEMail影響を与えますが、名前空間表記は、変換が発生し、両方のクラスが同じソースファイルで使用される場所でのみ影響を与えます。
Steven Jeuris

1
言語が名前空間をサポートしていない場合、プレフィックスは良い考えだと思います。しかし、言語が名前空間に関する何らかの形式をサポートしている場合は、それを使用してください(これは、名前空間が解決するように設計された問題です!) `
Martin York

@Steven Jeuris:クラスの名前は、作成後に選択する必要があります。その後、それを変更することは悪い習慣だと思います...不必要な影響がすべてあるからです。
アミン

@Loki Astari:使用しているIDEはわかりませんが、特定のクラスを検索したり開いたりするときに、別のクラス名を使用する方が簡単です。「メール」のカスタマイズされたバージョンを持つプロジェクトを見て、ファイルを開くたびに、いくつかの名前空間を参照する必要がありました。あなたの主張は今でも有効です。カスタマイズするクラスをいくつ作成するかは、パッケージ編成にとって主観的なものだと思います。
アミン

1
@アミン:あなたが実際に名前空間に反対しているは思いませんでした。名前空間についてもう少し読んで、名前空間を使用するすべての利点を確認することをお勧めします:カプセル化、あいまいさの排除、冗長性の減少など... Ps:ほとんどの最新のIDEには、ブラウズせずにソースファイルをすばやく見つけることができる検索機能があります。階層。私へのコメントについて:継続的なリファクタリングはソフトウェア開発の一部です。影響が大きいかどうかに関係なく、より適切な名前を付けられる場合は、名前を変更することを検討してください。ただし、これを最初に同僚と話し合うのが最善です。
Steven Jeuris

3

どの言語を使用していますか?答えは言語固有です。一般に、答えは「名前空間の使用」です。一部の外部名前空間との競合を避けるために、タイプ名を壊すことはほとんどありません。

単一のJavaアプリケーションでは、6つ以上の名前空間で同じクラス名(「Date」など)を定義するのが一般的です。1つのクラスが2つの別個のDateクラスを使用する必要がある場合、Javaは型エイリアスをサポートしていないため、Dateクラスの1つは、出現するすべての場所で完全修飾する必要があります。C ++のほうが簡単です。typedefを使用して、そのうちの1つの名前を変更できます。


私は同様の答えを投稿しようとしていましたが、C ++エイリアスの例の代わりに、エイリアスディレクティブを使用した C#について言及したいと思いました。
Steven Jeuris

@Steven:C ++の代わりにC#について言及するつもりでしたが、C#でプログラミングしてから数年が経ち、確信が持てませんでした。
kevin cline

2

この問題は頻繁にありますか?どのように管理しますか?

それは本当にあなたが使う言語に依存します。C ++およびJavaでは、この問題は名前空間を使用することで解決されます。私はc ++を使用していますが、同じ名前の異なるクラスを取得したことがあります。名前空間が異なるので問題ありません。

他の言語では、回避策はありませんが、異なる名前を指定します。


コンピューターの場合は問題ありませんが、開発者の場合は問題になる可能性があります。たとえば、EmailMessageやMailMessageがあるからです。
JSBach

@オスカー明らかに。コンピューターの場合もxyz123同じです。私は他の方法で冗長になることはありません(コメントであなたはそれを避けようとしていると言っていました)。
BЈовић

2

あなたの質問はとても良いです。メソッドにU(またはu)やcls(クラスの略)などの接頭辞を付けるとどうでしょうか?例えば:

clsEMailMEssageまたはuEMailMEssage

これは多くのタイプを必要とせず、タイプが「あなたのもの」であるとすぐにわかるでしょう。

編集 - 最初の2つのコメントへの応答:

すべてのハンガリー語の表記法が同じように作成されているわけではありません。システムハンガリー語アプリハンガリーを区別する必要があります。上記の提案はアプリハンガリー語のタイプに従っているため、害はありません。

IDにintIDの名前を付ける場合など、システムハンガリー語の表記に関連する害は、上記の提案にはありません。

これについて詳しくは、以下をご覧ください。間違ったコードを間違って見えるようにする-Joel On Software


3
誰かがハンガリーの記法を勧めるたびに、神は子猫を殺します。
コナミマン2011年

2
BIgHUmpCAmelCAsingも役に立ちません。
Steven Jeuris

上記のコメントを歓迎します。Plsは私の編集を表示しますが、子猫の殺害を望んでいる結局のところ、私たちの何人かは彼らの考えを変えないでしょう。:)
NoChance

有効な推論を追加したので、反対票を削除しました。ただし、このシナリオでは、Apps Hungarianがネームスペースよりも適切であることに同意しません。言語がエイリアスをサポートしている場合、それははるかに適切なソリューションです。ケビン・クラインの答えを見てください。
Steven Jeuris

@Steven Jeuris、コメントありがとうございます。名前空間は、入力を続けるのに少し時間がかかることを除いて、完璧です。提供したリンクを確認します。
NoChance
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.