public abstract class BaseDAO<T extends BaseDTO> {
public Integer create(T dto) {
}
public Integer update(T dto) {
}
public Integer delete(T dto) {
}
}
public class JobDAO extends BaseDAO<JobDTO> {
public JobDAO(Connection conn) {
super(conn);
}
@Override
public String getDBTableName() {
return "JobTABLE";
}
}
public class BaseDTO {
protected Integer ID;
public Integer getID() {
return ID;
}
public void setID(Integer ID) {
this.ID = ID;
}
}
public class JobDTO extends BaseDTO {
Integer employerID;
//getter
//setter
}
public class Job_GUI extends javax.swing.JFrame {
//GUI properties
}
我正在尝试理解Model, View, Controller
惯例,我想将MVC
应用于我拥有的数据传输和访问对象的上述类结构。我无法理解的是,我的结构是否高于MVC?如果是这样,模特是什么?我猜DTO本身就是Model
。 Job_GUI是我已经知道的View
,但Controller
是什么?
我想在Job_GUI本身中直接编写actionPerformed
代码,就像这个片段在db中创建作业一样:
JobDAO jdao = new JobDAO(conn);
//create object jobDTO to hold all form values to be passed to JobDAO
final JobDTO jobDTO = new JobDTO();
//populating JobDTO with values from form
jobDTO.setEmployerID(id);
jobDTO.setDescription(description.getText());
jobDTO.setTitle(txtTitle.getText());
jdao.create(jobDTO);
但是上面应该在Job_GUI
类本身或其他地方。如果我要在Job_GUI
上面插入上面的代码段,那么我是否会离开MVC惯例呢?你会把上面的片段放在哪里?如果我使用controller
,DTO
DAO
进行数据库交互,那么混淆在于确定我所拥有的Design Pattern
类中的哪一类。
答案 0 :(得分:3)
JobDAO jdao = new JobDAO(conn);
//create object jobDTO to hold all form values to be passed to JobDAO
final JobDTO jobDTO = new JobDTO();
//populating JobDTO with values from form
jobDTO.setEmployerID(id);
jobDTO.setDescription(description.getText());
jobDTO.setTitle(txtTitle.getText());
jdao.create(jobDTO);
在上面的代码中,您基本上可以完成 Controller 的工作,因为您将值分配给DTO,然后调用DAO的create方法。 这就是Controller应该做的事情。所以除了一个小的修正之外你就是对的:
JobDAO jdao = new JobDAO(conn); //not preferable
JobDAO jdao = new JobDAO(); //preferred inside Controller class
建议您在DAO中保留特定于连接的代码。您的Controller类不应该知道您的数据库连接。您可以在DAO的create / update / delete方法中执行此操作。
DAO where you actually interact with DB is part of MODEL in MVC.
请记住一些事情:
正如您所提到的,您已经清楚了View。所以我没有对此作出任何解释。