かなり前に、オブジェクトの命名について「正しい」方向へ導いてくれる記事(ブログ記事だったと思います)を読みました。プログラム内の命名には細心の注意を払ってください。
たとえば、私のアプリケーションが (典型的なビジネス アプリとして) ユーザー、会社、住所を処理する場合、 、User
、ドメインCompany
クラスがありAddress
、おそらくどこかにUserManager
、 、CompanyManager
、 がAddressManager
ポップアップして、それらを処理することになります。
UserManager
では、、、CompanyManager
が何をするのかわかりますAddressManager
か? いいえ、Manager はドメイン オブジェクトで実行できるすべての操作に当てはまる非常に一般的な用語だからです。
私が読んだ記事では、非常に具体的な名前を使用することを推奨していました。これが C++ アプリケーションで、UserManager
の仕事がヒープからユーザーを割り当てたり解放したりすることである場合、 はユーザーを管理するのではなく、ユーザーの誕生と死を守ることになります。うーん、これを と呼べるかもしれませんUserShepherd
。
あるいは、UserManager
の仕事は各 User オブジェクトのデータを調べ、そのデータに暗号的に署名することかもしれません。その場合、 が存在しますUserRecordsClerk
。
このアイデアが頭に残ったので、それを応用しようとしています。そして、この単純なアイデアが驚くほど難しいことに気づきました。
クラスが何をするかを記述できますし、(手抜きのコーディングに陥らない限り) 記述したクラスは1 つのことだけを実行します。その記述から名前にたどり着くまでに私が必要としているのは、名前のカタログ、つまり概念を名前にマッピングする語彙です。
最終的には、パターンカタログのようなものを頭の中に置きたいと思っています(多くの場合、デザインパターンはオブジェクト名(ファクトリーなど)を簡単に提供します)
- ファクトリー - 他のオブジェクトを作成します (名前はデザイン パターンから取得されます)
- シェパード - シェパードはオブジェクトの存続期間、作成、シャットダウンを管理します
- シンクロナイザー - 2つ以上のオブジェクト(またはオブジェクト階層)間でデータをコピーします
Nanny - オブジェクトが作成後に「使用可能な」状態になるのを助けます。たとえば、他のオブジェクトに接続することによって。
などなど。
では、その問題にどう対処しますか? 固定された語彙がありますか、それともその場で新しい名前を発明しますか、それとも、名前を付けることはそれほど重要ではない、または間違っていると考えますか?
追記: この問題について議論している記事やブログへのリンクにも興味があります。まず、この問題について考えるきっかけとなった元の記事を以下に示します。「マネージャー」なしで Java クラスの名前を付ける
更新: 回答の要約
ここでは、この質問から私が学んだことを簡単にまとめます。
- 新しい比喩を作らないようにしてください(ナニー)
- 他のフレームワークが何をするのか見てみましょう
このトピックに関するその他の記事/書籍:
- クラスの先頭や末尾に定期的に追加する名前は何ですか?
- クラスに名前を付ける最適な方法は何ですか?
- 本:デザインパターン: 再利用可能なオブジェクト指向ソフトウェアの要素 (ハードカバー)
- 本:エンタープライズ アプリケーション アーキテクチャのパターン (ハードカバー)
- 本:実装パターン(ペーパーバック)
そして、回答から私が(主観的に!)収集した名前の接頭辞/接尾辞の最新リストは次のとおりです。
- コーディネーター
- ビルダー
- ライター
- 読者
- ハンドラ
- 容器
- プロトコル
- 目標
- コンバータ
- コントローラ
- ビュー
- 工場
- 実在物
- バケツ
旅に役立つヒント:
名前に執着しすぎないでください。確かに名前は非常に重要ですが、膨大な時間を浪費するほど重要ではありません。10 分で良い名前が思いつかない場合は、先に進んでください。
ベストアンサー1
私は尋ねた同様の質問ただし、可能な場合は、 .NETフレームワークにすでに存在する名前をコピーし、JavaおよびAndroidフレームワークでアイデアを探すようにしています。
Helper
、、はManager
、Util
状態を含まず、一般的に手続き型で静的なクラスを調整するために付ける避けられない名詞のようです。 代替案はですCoordinator
。
名前に特に紫色の散文を取り入れて、、、、、などのものにすることもできますがMinder
、前述したように、慣れ親しんだフレームワーク名のままにしておくことを好みます。Overseer
Supervisor
Administrator
Master
.NETフレームワークでよく見られるその他の一般的なサフィックス (これが正しい用語である場合) は次のとおりです。
Builder
いくつかのパラメータを使用して特殊な型のインスタンスを構築する型。Builder
は通常は使い捨てです。変数を割り当てる必要すらない場合もあります。
型がオブジェクトを繰り返し作成する必要がある場合は、 を使用してくださいFactory
。
複数の異なる型のオブジェクトを作成する型の場合は、 を使用してくださいFactories
。Writer
何かに変数を書き込みます。Reader
何かを変数として読み取ります。Handler
状況などに対処するために設計されています。Container
何かを入れることができます。