いくつかの名前があり、それらの名前に手を伸ばしているのに気付いた場合、すでに何かを台無しにしていることがわかります。
例えば:
XxxManager
クラスはクラスの機能を説明する必要があるため、これは悪いことです。クラスが行うことについて思いつくことができる最も具体的なWordが「管理」である場合、クラスは大きすぎます。
他にどんなネーミングアンチパターンがありますか?
明確にするために、私は「どの名前が悪いのか」を尋ねているのではありません-その質問は完全に主観的であり、それに答える方法はありません。 「どのような名前がシステム全体の設計上の問題を示しているか」と尋ねています。つまり、コンポーネントXyzを呼び出したい場合は、おそらくコンポーネントが適切に作成されていないことを示しています。また、すべてのルールには例外があることにも注意してください。私は、デザインを本当に停止して再考する必要がある場合の警告フラグを探しているだけです。
次のネーミングアンチパターンは、.NET、特にC#に関連しています。
cxtCtrlMngr
などのフィールド名を真剣に見ました。それが何を表しているのか、ほとんど推測できません。ILoginAttemptRepository
は問題なく説明的です— ILoginAttemptRepositoryUsingEntityFrameworkForObjectRelationalMapping
は説明的ですが、明らかに問題があります。私がよく遭遇するのは、単純に、名前付けパターンをまったく使用しないことです。通常、開発者が無知であることを示します(名前付けパターンは良いことです)。また、このアンチパターンは、クラスに関連するすべての種類のメソッドをそのクラスに詰め込むことにより、SRPに著しく違反する傾向があります。それ自体なので、たとえば、Customerクラスには、プロパティ、CRUDメソッドなど、アプリケーションの一部が必要とする、Customerにリモートで関連するものがあります。
また、サフィックスとして「エンジン」を使用することは、「マネージャー」を使用することとほぼ同じであることを追加します。それは非常にあいまいであり、XxxEngine
というクラスは、一連のメソッドを含むVBスタイルのモジュールに相当する傾向があるため、オブジェクト指向プログラミングの知識やアイデアがなくても、「使いやすい」1つの場所にあります。 。
さて、最初に簡単な答えを入力してください:hungarian( http://mindprod.com/jgloss/unmainnaming.html と入力すると、他にも素晴らしいアイデアがいくつかあります。 http://www.joelonsoftware.com/articles/Wrong.html )
インターフェースの名前の前に「I」を、または抽象クラスの名前の前に「Abstract」を付けます。これは可能性があります抽象クラスの概念を持たない言語や、インターフェイスと抽象クラスを区別しない言語では言い訳になりませんが、たとえばJavaでは、これは常に悪い考えです。
また、私はマネージャーについてはあなたに同意しません。私はそのパターンを時々使用します。それは、別の名前を付けようとした場合、その名前はXxxxxManagerよりも説明的なものにならないことを意味します。 1つまたは2つの単語できれいに要約できないいくつかのタスク(必ずしも複雑なタスクではない)があります。
剥離:
私は傾いている障害があり、綴ることができません。スペルチェッカーがなければ、私は無力です。作成したすべての名前を確認のためにワードプロセッサにコピーしようとしますが、いくつかはいつも見落とします。私の最後のプロジェクトでは、APIの大部分を記述しましたが、Wordの応答を初めて使用したときはスペルチェックを行わなかったと思います。私たちはそれに反応する少なくとも50の機能を持っていました。チームに新しい人がやってきて、なぜ私たちが応答を使用するのかを尋ねました。
ええと、私の意見は少し物議を醸しています。しかし、試してみましょう...
私に関する限り、私はMike Baranczak(XxxController、XxxHandlerなど)に同意する必要があります。私たちにとって、コントローラーは「カプセル化」された何かのエントリポイントのようなものです。トランザクションの管理、予期しないエラーの処理、実際の作業を行うためのXxxHandlerの呼び出し。 XxxManagerはコントローラーの同義語です。 Managerを使用せず、Controllerを使用しないことが重要だと思います。チームで作業する場合、一貫性を保つことが非常に重要です。
このようなものにもっとふさわしい名前を見つけるのは本当に難しいか、おそらく不可能です。状況をより明確にするために、Xxxを適切に選択する必要があります。
私が個人的に嫌いなのは、get ...またはset ...というメソッドが単なるアクセサーではない場合です。私はdet ...が好きです。
もう一つ、それが私の頭に浮かびます:ボブおじさんによると。メソッド名の「And」は、多くのことをしていることの表れです。しかし、人生は常に白黒であるだけではありません-私が大丈夫だと思う状況があります-例えば。パフォーマンスの問題のため(データを既に持っている場合、なぜそれらを処理しないのかを確認するため)...
私は個人的には、システムのハンガリー語表記の大ファンでもあります。ほとんどの場合、IDEでソースコードを処理しています。ただし、エディターだけを使用している場合や、ブラウザでのリポジトリです。1つの欠点は、タイプのプレフィックスによるツールサポートです...
私は最も重要なことは一貫性を保つことだと思います-私にとっては次善の慣習-慣習を持たないよりはましです...
おそらく、最悪の名前付けアンチパターンはこれです:
create table stuff(..., foo1 string, bar1 string,
foo2 string, bar2 string,
foo3 string, bar3 string, ...)
[foo、bar]ペアの3要素リストがあります。 4番目が必要な場合は、テーブルに新しい列を追加する必要があります。
このようなコードにつながる:
'SELECT foo' + i + ', bar' + i + ' FROM stuff'
列fooとbarを使用して別のテーブルを作成し、stuffテーブルにリンクする必要があります。
create table fubar(foo string, bar string, stuff_id long)
2番目に悪いのはこれです。
class Student {
...
String homeStreet;
String homeCity;
String homeState;
String permStreet;
String permCity;
String permState;
...
}
ここでは、Addressクラスの2つのインスタンスではなく、6つのフィールドがあります。
このアンチパターンは、2つのセットのすべての組み合わせをリストする一連の2部構成の名前でマークされています。 [foo、bar] x [1,2,3]または[home、perm] x [street、city、state]
トートロジー であるクラスまたはインターフェイスの名前は、Javaだけでなく、あらゆる言語で)だけでなく、悪いものです。
トートロジー(修辞学)、たとえ繰り返しが明確でなくても、異なる言葉を使って同じことを言う。
Library
やCommon
などの一般的な名前のソフトウェアライブラリに頻繁に遭遇します。それらは次善の設計を示しています。開発者はコードの重複を避ける努力をしますが、機能に基づいて分解された設計を作成しようとはしません。
名前付けに関する Microsoft から、私は悪い名前に対してこのリストを提供できます: