Java MVC模型视图Dao分离

Java MVC模型视图Dao分离,java,swing,model-view-controller,Java,Swing,Model View Controller,我想优化我的Java编程代码,以更好地分离模型和视图 目前,我有代表视图的面板和代表模型的POJO和DAO 是否可以将模型组件从视图面板中分离出来 // Panel User class UserPanel extends JPanel{ DaoUser daoUser = new DaoUser; User user = daoUser.findUser(current_id); JTextField tf = new JTextField(); tf.setText(

我想优化我的Java编程代码,以更好地分离模型和视图

目前,我有代表视图的面板和代表模型的POJO和DAO

是否可以将模型组件从视图面板中分离出来

// Panel User
class UserPanel extends JPanel{
   DaoUser daoUser = new DaoUser;
   User user = daoUser.findUser(current_id);
   JTextField tf = new JTextField();
   tf.setText(user.getName());
}

//POJO User
class User{
 int id;
 String name;

Getters and Setters ..
}

// Dao User
class DaoUser{
 public void saveUser(User user)
 public User findUsers();
 public List<User> listUsers()

}
//面板用户
类UserPanel扩展了JPanel{
DaoUser DaoUser=新DaoUser;
User User=daoUser.findUser(当前_id);
JTextField=新的JTextField();
tf.setText(user.getName());
}
//POJO用户
类用户{
int-id;
字符串名;
能手和二传手。。
}
//Dao用户
类用户{
公共void saveUser(用户)
公共用户findUsers();
公共列表listUsers()
}

如果我是你,我会这样做:

class DaoUser extends Observable {
  //other methods
  public User findUsers (int id_user) {
    //find your user. Once you find it
    setChanged();
    notifyObservers(user_found);
  }
}
在您看来,您应该:

class UserPanel extends JPanel implements Observer {
  tf = new JTextField();
}

@Override
public void update(Observable o, Object ob) {
  User u=(User) ob;
  tf.setText(u.getName());
}

我希望这可以通过添加管理器/控制器层来帮助您

是的。顺便说一句,DaoUser的更好名称应该是UserDAO。“是否可以将模型组件DaoUser从视图面板中分离出来?”-是的。只需将
DoaUser
的实例传递给
UserPanel
,而不是创建它的实例。此外,你真的应该在类上使用
接口
来描述预期的行为。使用建议的观察者模式之一。。。MVC模式允许您在模型更改时更新视图。。。在这种情况下,你的变化是什么??