工具收集

MVC 架构

参考:

层的功能解释:

  1. java 中的 MVC 和 python 中的东西注意对应关系
  2. MVC: Model, View, Controller
  3. Model: 数据库 model
  4. View: html 模板渲染
  5. Controller: 外部的 http 请求路由转换成 内部的函数调用, 即: routers
  6. Service: 服务层包含业务逻辑

    • 即 DAO(data accessable objects), 使用模型和可能的数据访问对象来完成操作
    • 这里用来对接,外部的访问(Controller)和内部的 Database(Model) 之间的数据访问逻辑和数据转换、处理逻辑
  7. Repository 层:

    • 通过 JPA (java persistent API) 访问数据库(序列化)
  8. Config: 配置相关的类

数据和业务调用流程

  1. web 访问
  2. controller: 路由处理
  3. service:

    • 没有数据库:Service –> Model
    • 有数据库: Service –> DAO –> 数据表对象

层的功能界定

DAO 层

  • 负责数据的读取和写入

    • Repository 接口
    • Repository 的实现类 (Spring JPA, Java Persistent API)

      • Spring JPA 是一种基于 Hibernet 和 JPA 实现的 ORM 框架,可以方便的实现 CRUD 和负载的数据库操作

Service 层

功能:

  • 外来数据如何还原创建成 DAO 支持的数据对象
  • 内部数据如何组装成外部需要的样子

    • 例如:

      • 用户 id 列表
      • 用户名列表
      • 满足要求的(年龄 > 30)的所有用户

Model (entity) 层

功能:

  • 用来和数据库构建关系的 POJO 类
  • 用来 Service 等层之间的数据传递

DTO 类 (Data Transfer object)

功能:

  • 专门用来 Controller 暴露到外部使用
  • 用来在 Service 层中生成,放回给 Controller, Controler 再作为 Response 数据返回
  • 类似 python fastapi 的 schema 分层

例子:

  • 实际返回的 RealUser 和数据库中 User 不一样,RealUser 内部的属性还包含了他的老师对象列表, 这个 RealUser 是合成的对象,数据库中并不真实存在对应的对象

放置位置:

  • 可以专门做一个 dto 包(package)用来存放这些