免責事項:
返信では、スタイルの問題に焦点を当て、セキュリティの観点から、ID、ログイン、およびプレーンパスワードが使用する適切なパラメーターセットであるかどうかを忘れます。ユーザーの特権について把握するために使用している基本的なデータセットに対する私の答えを推定できるはずです...
またuser.isAdmin()
、と同等であると考えIsAdmin(User user)
ます。それはあなたが選ぶべき選択です。
応答:
私の推奨事項は、どちらかのユーザーのみです。
public bool IsAdmin(User user);
または、次の行に沿って両方を使用します。
public bool IsAdmin(User user); // calls the private method below
private bool IsAdmin(int id, string name, string password);
パブリックメソッドの理由:
パブリックメソッドを記述するときは、通常、それらがどのように使用されるかを考えるのが良いでしょう。
この特定のケースでは、通常このメソッドを呼び出す理由は、特定のユーザーが管理者であるかどうかを把握するためです。それはあなたが必要とする方法です。各呼び出し元が送信する適切なパラメーターを選択する必要はありません(コードの重複によるミスのリスクもあります)。
プライベートメソッドの理由:
必要なパラメーターの最小セットのみを受け取るプライベートメソッドは、良いことです。時々そんなにありません。
これらのメソッドを分割する利点の1つは、同じクラスの複数のパブリックメソッドからプライベートバージョンを呼び出すことができることです。あなたがのためにわずかに異なるロジックを持つように(何らかの理由で)をしたかった場合例えばLocaluser
とRemoteUser
(?多分、リモート管理者をオン/オフにする設定があります):
public bool IsAdmin(Localuser user); // Just call private method
public bool IsAdmin(RemoteUser user); // Check if setting is on, then call private method
private bool IsAdmin(int id, string name, string password);
さらに、何らかの理由でprivateメソッドをpublicにする必要がある場合は...できます。に変更private
するのと同じくらい簡単public
です。この場合、それほど大きな利点とは思えないかもしれませんが、実際にはそうなる場合があります。
また、単体テストを行うと、よりアトミックなテストを行うことができます。通常、このメソッドでテストを実行するために完全なユーザーオブジェクトを作成する必要がないのは非常に便利です。また、完全なカバレッジが必要な場合は、両方の通話をテストできます。