2013-08-31 91 views
2

這是一個相當基本的問題,但我是一種圍欄。假設我有一個類A,它有方法method1,method2,method3,method4和一個主要方法。Java方法設計查詢

method2僅由method1調用; method4僅由method3調用。

解決方案說,從主,並與方法3相同,並調用從主,也與方法2 4.方法1

所以是不是很糟糕的設計有主要方法調用方法1,方法2和明確?如果在主方法中調用它們,即使它們僅依賴於整個類中的單個方法,在類中擁有私有方法又有什麼意義?

從方法1調用方法2和方法3調用方法4不是更簡潔嗎?因爲在這兩種情況下後一種方法只由前者調用?

我認爲這是輔助方法的重點,以便我們能夠抽象出不必要的實施細節。

再次,我對這個問題的簡單性表示歉意,我對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. 
} 

}

在上述情況下不會只是更容易調用方法2()從方法1()而不是調用它的主要的()。我想知道這種實施方式是否有優點或缺點。

+3

我不認爲有足夠的上下文在這裏回答你的問題。你說「*解決方案說*」 - 什麼解決方案?有什麼問題? –

+0

該問題已更新,基本代碼在上面給出了我感興趣的部分問題。基本上它基於特定用戶輸入的用戶名和密碼創建或驗證用戶帳戶。 – anonuser0428

回答

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."); 
    } 
} 

當然,真正的登錄系統會有更多的細節需要考慮。

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

+0

當然你有更多的細節需要考慮 – Ventura