使用DAO,DTO模式作为MVC

时间:2013-01-26 14:21:46

标签: java sql model-view-controller design-patterns data-transfer-objects

    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惯例呢?你会把上面的片段放在哪里?如果我使用controllerDTO DAO进行数据库交互,那么混淆在于确定我所拥有的Design Pattern类中的哪一类。

1 个答案:

答案 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.

请记住一些事情:

  • MVC(建筑设计模式)强调分离关注点。因此,请确保您已为View,Controller和Model
  • 定义良好的类
  • 您的班级名称应该传达它所属的组件(BaseDAO等)
  • 控制器控制视图和模型。因此,您的视图和模型不应该彼此了解。

正如您所提到的,您已经清楚了View。所以我没有对此作出任何解释。