ずっと前に私は記事を読んだことがあります(私はブログエントリだと思います)。これは、オブジェクトの名前付けに関する「正しい」トラックに私を導きました。
たとえば、私のアプリケーションが(典型的なビジネスアプリとして)ユーザー、会社、アドレスを処理している場合、a User
、a、Company
およびAddress
ドメインクラスがあり、おそらくこれらの処理を行うa UserManager
、a、CompanyManager
およびanのAddressManager
ポップアップが表示されます。
だからあなたは何それらを伝えることができるUserManager
、CompanyManager
とAddressManager
のですか?いいえ。Managerは、ドメインオブジェクトで実行できるすべてのものに当てはまる非常に一般的な用語であるためです。
私が読んだ記事では、非常に具体的な名前を使用することをお勧めしました。それがC ++アプリケーションであり、UserManager
の仕事がユーザーの割り当てとヒープからの解放であった場合、ユーザーを管理するのではなく、その誕生と死を守ります。うーん、多分これをと呼ぶことができますUserShepherd
。
または、UserManager
の仕事は、各Userオブジェクトのデータを調べて、データに暗号で署名することです。次に、UserRecordsClerk
。
この考えが私にくっついたので、私はそれを適用しようとします。そして、このシンプルなアイデアを驚くほど難しいものにしてください。
私はクラスが何をするかを説明することができます(そして私が迅速で汚いコーディングに陥らない限り)私が書くクラスは正確に1つのことを行います。その説明から名前に行くのに欠けているのは、一種の名前のカタログであり、概念を名前にマッピングする語彙です。
最終的には、パターンカタログのようなものを念頭に置きたいと思います(多くの場合、設計パターンは、ファクトリーなどのオブジェクト名を簡単に提供します)。
- ファクトリー-他のオブジェクトを作成します(設計パターンから取得した名前)
- 羊飼い-羊飼いはオブジェクトの寿命、オブジェクトの作成とシャットダウンを処理します
- Synchronizer-2つ以上のオブジェクト(またはオブジェクト階層)間でデータをコピーします
ナニー-オブジェクトが作成後に「使用可能な」状態に達するのを支援します-他のオブジェクトへの配線などにより
などなど
それで、あなたはその問題をどのように扱いますか?あなたは固定された語彙を持っていますか、あなたはその場で新しい名前を発明しますか、それともそれほど重要ではないか間違っているものに名前を付けることを考えますか?
PS:この問題について議論している記事やブログへのリンクにも興味があります。初めに、私がそれについて考えさせた元の記事は次のとおりです:「マネージャー」なしのJavaクラスの命名
更新:回答の要約
その間、私がこの質問から学んだことの簡単な要約を以下に示します。
- 新しい隠喩を作成しないようにしてください(乳母)
- 他のフレームワークが何をするか見てください
このトピックに関する他の記事/本:
- 定期的にクラスの先頭に追加/追加している名前は何ですか?
- クラスに名前を付ける最善の方法は何ですか?
- 本:設計パターン:再利用可能なオブジェクト指向ソフトウェア(ハードカバー)の要素
- 本:エンタープライズアプリケーションアーキテクチャのパターン(ハードカバー)
- Book:実装パターン(ペーパーバック)
そして、答えから私が(主観的に!)収集した名前のプレフィックス/サフィックスの現在のリスト:
- コーディネーター
- ビルダー
- ライター
- 読者
- ハンドラ
- 容器
- プロトコル
- 目標
- コンバータ
- コントローラ
- 見る
- 工場
- エンティティ
- バケツ
そして道のための良いヒント:
名前の麻痺を取得しないでください。はい、名前は非常に重要ですが、膨大な時間を無駄にするほど重要ではありません。10分で良い名前を思い付かない場合は、先に進んでください。