GOAL:データをAndroidデータベースに保存する責任があるクラスに名前を付けます。クラス構造は次のようになります
ClassName {
public void saveSync(...){
/* implementation*/
}
public void auxiliaryMethod(...){
/* implementation */
}
}
質問:この種のクラスに名前を付ける適切な方法はどれですか?常に名詞を見つける必要がありますか、それとも動詞を使用できますか?
クラスが適切にカプセル化されている場合、外部からのフィールドがあるかどうかを判断するのは困難です。
一部のクラスは不変です。オブジェクトがいったん作成されると、フィールドを変更することはできません。クラスも不変です。しかし、オブジェクトを変更できないだけでなく、オブジェクトを構築する方法は1つしかありません。
これは、全体を動詞として考える必要があるという意味ではありません。名詞でもかまいません。たった1つのフレーバーの名詞です。
あなたが持っているのは、一緒に動き回る機能のバッグです。クラスが適切に設計されている場合、これらの関数は互いに何らかの関係があります。それらをまとめたその単一の統一アイデアは、クラスにその名前を与えるはずです。名前によって、クラスに属する関数とそうでない関数が明確になります。人々が名前を読んで、彼らが中に見つけたものに驚いたなら、あなたは悪い名前を持っています。
あなたの考えは、永続性についてのようです。それは名詞です。
この状況に陥ったとき、一歩下がって、メソッドを呼び出す方法を考えます。名詞対動詞を1分間忘れます。それから私は空白埋めを演奏し、最も自然に聞こえるものを使います。
___________.saveSync()
dataManager.saveSync()
?saveHelper.saveSync()
?entityRepository.saveSync()
?いくつかの場所からそれを呼び出すまで、クラスに名前を付けない場合もあります。あれを呼べ NewClass1234
コンテキストで呼び出されているのがわかるまで、別の名前を試しながらコードを読み上げます。
同僚にコードを見せて提案を求めることもできます。私は、同僚が私の名前に戸惑う時間を減らすようにしています。そのため、そのフィードバックを事前に得ることが役立ちます。
ユーティリティクラスのようです。 WhateverItIsUtilが名前であるのが一般的ですが、それらが使用されているクラスに配置するかどうかを自問する必要があります。
また、動詞と名付けるべきではないと思います。多くの人はそれをSomethingManagerと名付けることもあります。
明らかに、メソッドを多くのクラスと共有する必要がある場合は、この実装に行き詰まっているように感じるかもしれません。それらを使用するクラスのみにそれらを含める必要があるのは、単一責任の原則のためです。実装では、1つの「アクター」からの単一の変更のみが必要であると述べています。アクターは、変更を必要とするグループです。メソッドの変更を必要とする複数のアクターがある場合、それを変更すると他のアクターのコードが壊れ、保守性の問題が発生します。したがって、このタイプの事柄については、コンテキストが常に問題になります。
私にとって最初の考慮事項は、データが概念を表すかどうかです。もしそうなら、私はコンセプトの名前を取り、オプションで「UserDAO」などの「DAO」を追加します。
データが何でも混在している場合は、「UtilDAO」などのより一般的なトピックを検討することもできます。