【问题标题】:Using DAO,DTO pattern as MVC使用 DAO、DTO 模式作为 MVC
【发布时间】:2013-01-26 14:21:45
【问题描述】:
    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 代码,类似这样 sn-p 在 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 中插入上面的 sn-p,我是否会脱离 MVC 约定?你会把上面的sn-p放在哪里?如果我要使用DTO,DAODesign Pattern 进行数据库交互,那么困惑在于从我所拥有的所有类别中识别出哪个是controller 类。

【问题讨论】:

  • 模型由 DAO 类使用。控制器使用 DAO 类来决定它应该呈现哪些视图。如果您有很多业务规则,最好有一个业务层并让您的控制器使用它而不是 DAO 类。另一方面,业务层将使用 DAO 类。在 Controller 和 VIews 之间,您可以传输 DTO 对象或 ViewModel。
  • @FelipeOriani 尽管我感谢您的评论,但并没有真正回答我的问题。我想知道我是否通过将代码的 sn-p 添加到 Job_GUI 类本身的 actionPerformed 方法中来遵循 MVC 约定。

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


【解决方案1】:
       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 的创建/更新/删除方法中执行此操作。

DAO where you actually interact with DB is part of MODEL in MVC.

请记住几件事:

  • MVC(架构设计模式)强调关注点分离。因此,请确保您为 View、Controller 和 Model 定义了明确的类
  • 你的类名应该表明它属于哪个组件(BaseDAO 等)
  • 控制器控制视图和模型。所以你的 View 和 Model 不应该互相感知。

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

【讨论】:

    猜你喜欢
    • 2016-10-06
    • 2012-12-31
    • 2015-12-19
    • 2011-02-05
    • 2021-03-17
    • 2021-09-28
    • 2011-09-08
    • 2010-11-15
    • 2015-10-11
    相关资源
    最近更新 更多