Java 中的 domain 、 persistent 、Data Access 用法示例

发布时间 2023-11-30 11:47:21作者: vx_guanchaoguo0

很多开发者 不遵从开发规范 甚至搞不清楚 各种对象之间关系

  • 先说分层
    • 领域层 domain DO
    • 持久层 persistent PO
    • 数据访问 data Access ADO
    • 业务层 business BO
    • 转换层 transfer TO
    • 视图层 view VO

从数据库获取数据

  • domain 对应一个实体 只包含属性、行为 、规则 例如 图书
  • 该对象是轻量级 类似是贫血模型 不可以参杂业务
public class Book {
    private String title;
    private String author;
    // 其他属性和方法

    public Book(String title, String author) {
        this.title = title;
        this.author = author;
    }

    // Getters 和 Setters
}
  • persistent 领域对象的持久化表示, 持久化对象通常与数据库表对应 例如图书表
  • 该对象是轻量级 也就是贫血模型 可以参杂数据库的操作
public class BookEntity {
    private long id;
    private String title;
    private String author;
    // 其他属性和方法

    // Getters 和 Setters
}
  • data Access 提供了对持久化对象的访问方法,封装了底层的数据库操作
public class BookDAO {
    public void save(Book book) {
        // 将领域对象 Book 转换为持久化对象 BookEntity,并保存到数据库中
        BookEntity entity = new BookEntity();
        entity.setTitle(book.getTitle());
        entity.setAuthor(book.getAuthor());
        // 执行数据库保存操作
    }

    public Book getById(long id) {
        // 从数据库中查询指定 ID 的持久化对象 BookEntity,并将其转换为领域对象 Book
        BookEntity entity = // 查询数据库获取持久化对象
        Book book = new Book(entity.getTitle(), entity.getAuthor());
        // 设置其他属性
        return book;
    }

    // 其他数据访问方法,例如更新、删除、查询等
}

讲数据库的数据返回到服务层

  • PO-> BO->TO
  @Override
    public BookTO findBookList(BookTO transfer) {

        // po  persistent    持久化对象       对应一个数据表 
        // do  domain        领域对象         对应一个实体
        // dto  data access  持久层访问对象    操作持久层对象
        BookDAO bookDAO = new BookDAO();
        
        BookPO bookPo = bookDAO.getBook();
        BookInfoPO bookInfo = bookDAO.getBookInfo();

        //  bo business  业务对象  通常一个业务需要查询多个表 也就是多个po
        BookBO business = new BookBO();
        business.setBook(bookPo);
        business.setBookInfo(bookInfo);
        List<BookBO> businesses = new ArrayList<>();
        businesses.add(business);

        // to  transfer对象
        transfer.setBookList(businesses);

        return transfer;
    }
}

服务层到控制器返回到视图层

  • TO->VO
public class BookController {

    @PostMapping("findBookList")
    public AjaxJson findBookList(@RequestBody PageDTO pageDTO) {

        // dto   data translate  接受外部数据
        BookTO param = new BookTO();
        param.setPageNum(pageDTO.getPageNum());
        param.setPageSize(pageDTO.getPageSize());
        param.setUsername(pageDTO.getKeywords());

        // to  translate  传输对象传入到服务层
        BookServiceImpl BookService = new BookServiceImpl();
        BookTO transfer = BookService.findBookList(param);

        // vo  view  传回视图层
        BookVO view = new BookVO();
        view.setTransfer(transfer);

        //  返回的形式
        AjaxJson result = new AjaxJson();
        result.addJson(view);
        return result;
    }
}