回答:
悪臭はありません。これが必要になるかもしれませんが、なぜそれが間違っていると思われるのですか?アトミックレベルのメソッドは、タスクを実行する独立したエンティティです。タスクを実行する限り、アクセスできる人は誰でもそれを呼び出してタスクを完了できます。
コードの匂い?はい、本当に悪いものではありませんが、クラスに多くの責任があるかもしれないという良い指標です。
クラスを異なるオブジェクトに分割する必要があるかもしれないという兆候と考えてください。プライベートオブジェクトのメソッドは、実際には同じオブジェクトのパブリックメソッドを呼び出す必要はありません。
もちろん、クラスを検査し、メソッド呼び出しの理由が明確になれば、それは完全に合理的な使用法である可能性があります。一般に、クラスのユーティリティメソッドはプライベートであると期待しますが、パブリックであり、他の方法で利用されている場合、一般に、それらのメソッドもパブリックであることを期待します。
すべてのコードの匂いと同様に、これはさらなるコード検査、合理化、そしておそらくリファクタリングの動機付けですが、警告の原因ではありません。
このクラスのソースコードを読んでいない人がサブクラスを作成してpublicメソッドをオーバーライドしようとすると、不愉快な驚きにつながる可能性があります。それが本当の関心事であるかどうかは、明らかにあなたの状況に依存します。たぶん、パブリックメソッドやクラスをfinalにすることを検討する必要があります。
いいえ。その場合、他に何をすべきですか?プライベートメソッドをパブリックにするか、パブリックメソッドをプライベートにしますか?パブリックメソッドからプライベートメソッドにコードをコピーして貼り付けますか?
私はこれが古い投稿であることを知っていますが、仕事で議論してきたものです。私はこれをコードの匂いだと考えていますが、なぜこれをしたいのか理解できません。プライベートメソッドがパブリックメソッドを呼び出す必要がある場合、パブリックメソッドのコンテンツを取得してプライベートメソッドに配置する必要があります。これにより、両方のメソッドを呼び出すことができます。どうして?
パブリックメソッドには、コードを内部で実行すると不要なテストが含まれる場合があります。UserObjを受け取り、たとえばユーザー権限をテストしたい場合があります。
パブリックコールの後、スレッドを使用している場合、オブジェクトをロックダウンする必要があるかもしれません。そのため、内部的には、パブリックメソッドにコールバックしたくないでしょう。
私の意見では、循環エラーや無限ループ、メモリ不足例外が発生する可能性が高くなります。
単純で単純なデザインと「怠laz」。パブリックメソッドは、外部の世界へのアクセスを提供します。あなたがすでに中にいるとき、外に戻る理由はありません。
反対を想像してください。プライベートメソッドにあり、パブリックメソッドの機能が必要な場合プライベートメソッドからパブリックメソッドを呼び出せなかった場合はどうなるでしょう。あなたならどうしますか?
答えは、パブリックメソッドの機能が必要な場合、このクラスのメソッドまたは他のクラスからそのメソッドを呼び出すことができる必要があることは明らかです。
私のコードでは、レイジーロードゲッターを作成することがよくあります。つまり、オブジェクトが最初に要求されたときに初期化され、その後、同じインスタンス化されたオブジェクトを再利用します。ただし、遅延ロードを使用してインスタンス化されたオブジェクトは、特定のポイントで必ずしもインスタンス化されるとは限らないことを意味します。そのオブジェクトが既にインスタンス化されていることを知ったり、別のメソッド内で遅延ロードの同じコードを繰り返したりするように呼び出しのシーケンスに頭を包むのではなく、そのオブジェクトが必要なときはいつでも遅延ローダーを呼び出します。
パブリックメソッドをスマートな方法で使用できるように、それらを誤って使用することもできます。この例としては、別のプライベートメソッドを呼び出す前にパラメータを処理するパブリックメソッドがあります。同じパラメータを持っているという理由だけで、そのパブリックメソッドを何気なく呼び出すのは間違いです。間違いは微妙ですが、それは何よりも設計エラーであり、パブリックメソッドのパラメーターではなく、内部メソッドのパラメーターで管理することを学ぶ必要があります。
あなたの質問に答えるために、あなたがそれを正しく使うなら、それは確かに悪いコードではありません。