2

これはかなり初歩的な質問ですが、私はちょっと戸惑っています。クラス A があり、メソッド method1、method2、method3、method4 および main メソッドがあるとします。

method2 は method1 によってのみ呼び出されます。method4 は method3 によってのみ呼び出されます。

解決策は、main から method1 を呼び出し、main から method2 を呼び出し、method3 と 4 と同じように呼び出すことを示しています。

では、main メソッドで method1 と method2 を明示的に呼び出すのは悪い設計ではないでしょうか。クラス全体で単一のメソッドにのみ依存している場合でも、メイン メソッドでそれらを呼び出す場合、クラスにプライベート メソッドを含める意味は何ですか?

method1 から method2 を呼び出し、method3 から method4 を呼び出す方がクリーンではないでしょうか。どちらの場合も、後者のメソッドは前者によってのみ呼び出されるためです。

これがヘルパーメソッドの要点であり、実装の不要な詳細を抽象化できると思いました。

質問が単純であることを再度お詫び申し上げます。私は Java を初めて使用します。

Class A{

 public static void main(String[] args){
    int x = method1()
    if ( x = 0){
                  //user wants to create a new account
    method2()
    }


 }

private static int method1(){ 
  //some code to check user login credentials in list of users
  //if login credentials fail,user is asked if they want to create a new account, if yes,
  //method 2 is invoked
  //return value is whether the user wants to create a new account or not.
}
private static void method2(){
   //creates new account for user and is only invoked by method1.
}

}

上記の場合、main() で呼び出すのではなく、method1() から method2() を呼び出す方が簡単ではないでしょうか。このスタイルの実装の利点または欠点があるかどうかを知りたいです。

4

2 に答える 2

5

大まかに言うと、これは関心の分離の演習です。まず、メソッドに実際の名前を付けましょう。

checkUserAccount(name, password)
addNewUserAccount(name)

ここで、ユーザーが見つからない場合checkUserAccount()に呼び出すように記述したとします。この場合、メイン プログラムには、ユーザー資格情報を確認するだけの関数を呼び出す方法がありません。メイン プログラムはユーザー アカウントをチェックするしかありません。ユーザーが見つからない場合は、新しいアカウントが追加されます。後で変更することにした場合、これはあまり柔軟ではありません。addNewUserAccount()name

一方、これらのアクションを分離すると、メイン プログラムは、ユーザー アカウントが見つからない場合に何をするかを決定できます。その後、あなたが示したようなコードを書くことができます:

if (checkUserAccount(name, password)) {
    // great! logged in
} else {
    addNewUserAccount(name);
}

これにより、新しい機能を追加することを選択した場合に、メイン プログラムを簡単に変更できます。例えば:

if (checkUserAccount(name, password)) {
    // great! logged in
} else {
    if (newUsersPermitted) {
        addNewUserAccount(name);
    } else {
        System.out.println("Sorry, this system is closed.");
    }
}

もちろん、実際のログイン システムには、さらに多くの詳細を考慮する必要があります。

于 2013-08-31T21:23:10.330 に答える
0

これは単なる疑似コードであり、アイデアを提供するためのものです。

public class User {

    String name;
    String username;
    String password;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}

ここに質問を残すことができます

public class UserDAO {

    public Boolean checkUsername(User user){


        //here you use the object User
        //ex: user.username, user.password in your query

        String sql = "select bla bla bla";

        if(sql){

            //save something in log(just a example for a private method)
            saveLog();

            return true;
        }else{
            return false;
        }

    }

    private Boolean saveLog(){

        String sql = "insert bla bla bla";

        if(sql){
            return true;
        }else{
            return false;
        }


    }

}

これがあなたのメインクラスです

public class Test {


    public static void main(String[] args) {

        User u = new User();
        u.setUsername("john");
        u.setPassword("6876sdh");

        UserDAO dao = new UserDAO();
        Boolean ret = dao.checkUsername(u);

        if(ret){
            System.out.println("OK");
        }else{
            System.out.println("No Ok");
        }



    }

}

簡単な例: http://www.roseindia.net/tutorial/java/jdbc/dataaccessobjectdesignpattern.html

于 2013-08-31T21:42:21.993 に答える