クラスの命名が衰弱する[終了]


9

これがOCDトレイトであるかどうかはわかりませんが、クラス(または関数、名前空間など)に名前を付けると、外部で使用されると思われる場合、完全にブロックされて処理を続行できなくなることがあります特定のプロジェクトの。たとえばAPI。またはユーティリティクラスライブラリ。

(私の心の中で)ネーミングが正確でない場合、私は続けることができません...正しい名前を考え出そうとして、行き詰まってしまいます。名前を確認するためにそれを使用する小さなアプリを書いてみましたが、それは役に立たないようです...

私はそれが問題ではないことを知っています、そしてあなたが最初にそれを完璧にすることを前提とすることはプログラミングの考え方に反します...私はそれに無力だと感じます...

ヒント/アイデアをいただければ幸いです...


3
私の経験から、クラスの本体を完成させたり、リファクタリングしたりすると、クラスの名前とメソッドがその場所に分類され始めます。
ジョブ

11
必須の引用:「コンピュータサイエンスには、キャッシュの無効化と名前の付け方という2つの難しい問題があります。」—フィルカールトン
マッケ

身近な感じ。あきらめないでください。「共通」、「ユーティリティ」、「マネージャー」、「ヘルパー」などの名前を付けないでください。:)
Arnis Lapsa、2011年

回答:


10

私の考えでは、あなたが抱えている問題は、良い名前を思いつくためのより良い方法を見つけるだけでなく、そうするための衝動に対処することです。正直に言うと、私も似たような特徴を自分で認識しています。結局のところ、名前は重要であり、私が取り組んでいるコンセプトには良い名前が好きです。ただし、それらは常に最も重要なことではありません。

この種のものを克服するために私が使用する方法のいくつかを以下に示します。

  1. 完璧な解決策はなく、他より優れている解決策があることを認識してください。
  2. 最初のものを最初に置きます。完全に完了するよりも、プログラミングの割り当てを完了することが重要です。
  3. 他の人に聞いてください。誰もが私たちが行き詰まっている領域がありますが、幸いにも、さまざまな場所でさまざまな人々が行き詰まります。たぶん、他の誰かが良い名前を思いつくか、それが本当に重要ではないとあなたに言うでしょう。
  4. 時間制限を設定します。自分がハングアップすることを実行するためにx分自分に与えて、次に進みます。
  5. 後で戻ってくると自分に約束してください。あなたが戻ってきたいもののログを保管してください。これらの種類の問題の多くは、少しだけ放置すると明らかになります。後でもっと良い名前を付けるか、それが本当に問題ではないと認識するでしょう。
  6. 100年後、誰も気にしないことを認識してください。
  7. 反対を行います。クラスに本当に悪い名前を付けて、何が起こるか見てみましょう。これは、より適切な名前に時間を費やす必要があることを確認するか、それが本当に重要であるかを示します。また、これは、強迫観念から抜け出すのに役立ちます。
  8. 祈る。これはしばしば私にとってはうまくいきます。
  9. あなたがしていることとは別に自分を大切にします。自分の価値は完璧をもたらすことから生まれるという考えから離れてください。自分の仕事とは別に、本質的な価値があることを認識すると、自分の基準を満たさないときは恥ずかしさを感じなくなります。
  10. 新しい単語を作り、それを使ってクラスに名前を付けるか、古い単語を再利用します。プログラミングは創造的なプロセスであり、私たちが取り込んだアイデアが新しいアイデアになることもあります。新しいアイデアには新しい名前が必要です。「EmployeeTransmogrifier」は、クラスの完全に有効な名前です。
  11. 間違った問題を解決しようとしていると考えてください。たとえば、呼び出し元のニーズが何であるかについて非常に明確な考えなしにAPIを作成することはお勧めできません。この問題を解決すると、命名の問題がはるかに簡単になる可能性があります。
  12. 昼食。ランチはいつもおいしいです。

4
昼食は+1。多くの人々は問題を解決するために何か他のものについて考えることに十分な価値を置きません。
unholysampler

いくつかの素晴らしい、よく考え抜かれたポイント...
davidsleeps

5

第一に

「このクラスの唯一の目的は何ですか?」と自問してください。単一責任の原則を遵守しないと、クラスとメソッドの命名が非常に難しくなります。その質問に答えられない場合は、クラスに何をしてほしいかを再考し、懸念事項を分離することを検討する必要があるかもしれません。これにより、名前を付けやすくなります

第二に

クラスに名前を付けるパターンはありますか?たぶん、パターンなど、いくつかの一般的な命名パターンを確認してみてください。これは、上記のSRPに対処すると、理解しやすくなります。クラスはXMLを解析しますか?XMLParserを試してください。XMLを解析し、入力を表すドメインモデルを作成し、DBに永続化して、成功メッセージをTwitterに投稿しますか?リファクタリングしてみてください。

第三に

私はあなたがどこから来たのか理解しており、以前に同じような状況にあったことがあります。おそらく、最初に一時的な名前を付けて、いくつかの機能でクラスを具体化してみてください。優れたIDEまたはリファクタリング支援があれば、クラスの名前変更はワンクリックのアクションになるはずです。そのため、最初にクラスに付ける名前は永続的なものである必要はありません。これは、OCDブロックを乗り越えるのに役立ち、潜在意識がそれをさらに処理する時間を与えます。


最後に、少しオフトピック

先日行ったいくつかの作業で電球の瞬間があり、重要ではないシステムを実装し、クラスのさまざまな名前などをいじくり回していた...機能に応じてインターフェースに名前を付け、特定の実装に応じたクラス...たとえば、IXMLParserとXMLParserを使用したくなるかもしれませんが、入力がJSONに変更されるとどうなりますか?代わりにIInputParserを試してみてください。その方法で、異なる方法でIInputParserを実装する具象クラスXMLParserとJSONParserを作成できます。


ええ、私もこのような瞬間がありました...問題はあなたがそれで非常にうまくなり、意図したコードを書くことができないだけです、3つは常に抽象の別のレイアウトです...
Robin Vessey

1

私にとってそれは通常、デザインが私の頭の中ではっきりしないサインなので、私は名前を作り、自分にもっと良いものを思いつくための時間(例えば2分)を与えます、その時間の終わりに、私は私が最初に思いついたものを使用してください。まず始めに、バーニー、ウィルマ、フレッドがお気に入りです。私は「BarniesInputParser」のようなことをします。名前がとても悪いので、もっと良いものを考え出すか、後で変更する必要があります。それらはまた非常に悪いため、ユニークであり、リファクタリングを簡単で安全にします。不完全なコードを見ている人は、それが不完全であることを即座に確認できます。

重要なことは、機能を追加していない間は、名前を定義する(およびデザインを明確にする)ために使用する新しい情報を脳に提供しないことです。あなたがしているのは、同じ入力をさまざまな方法で逆流させることだけです。

またはコーヒーを作りに行きます。あなたが機械に着く前に、あなたはそれを手に入れます...


恐ろしいことに、私はそのように命名された出荷済みソフトウェアを知っています...あなたが「ティム」が誰であるかをまだ知っている会社で唯一のあなたである5年後の1つを説明しようと想像してみてください。
Yaur

0

しばらく前に友達からもらった。プロセスが行うことになっていることを書き出します。ほんの短い物語。次に、名詞をクラスに、動詞をメソッドに、副詞をプロパティに変換します。


これは、OOADを教えるためのシンプルなCS101タイプの演習です。ただし、教授や教科書の著者が考案していない実際のシステムでは不十分です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.