Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[arch] 分层架构-mvcm #1

Open
Alice52 opened this issue Sep 21, 2023 · 2 comments
Open

[arch] 分层架构-mvcm #1

Alice52 opened this issue Sep 21, 2023 · 2 comments

Comments

@Alice52
Copy link

Alice52 commented Sep 21, 2023

Note
Manager 层提供原子的服务接口,Service 层负责依据业务逻辑来编排原子接口
实际开发中Manager层得使用建议

  1. 复杂业务,service提供数据给Manager层,负责业务编排
    把事务下沉到Manager层,Manager层不允许相互调用,不会出现事务嵌套
  2. 专注于不带业务sql语言,也可以在manager层进行通用业务的dao层封装
  3. 避免复杂的join查询,在 manager 层拆分成简单SQL
  4. 对Service层通用能力的下沉, 如缓存方案、中间件通用处理
  5. 对第三方平台封装的层

image

  1. 开放接口层: 进行 网关安全控制、流量控制等
    • 可直接封装 Service 方法暴露成 RPC 接口
    • 通过 Web 封装成 http 接口
  2. 终端显示层:前端js,html,css 渲染
  3. Web 层
    • 主要是对访问控制进行转发
    • 各类基本参数校验
    • 异常处理等
  4. Service 层:相对具体的业务逻辑服务层 | 与DAO交互
  5. Manager 层:通用业务处理层
    • 对第三方平台封装的层,预处理返回结果及转化异常信息,适配上层接口
    • 对Service层通用能力的下沉, 如缓存方案、中间件通用处理;
    • 对多个DAO的组合复用
  6. DAO 层:数据访问层,与底层 MySQL、Oracle、Hbase 进行数据交互。
@Alice52
Copy link
Author

Alice52 commented Sep 21, 2023

image

@Alice52
Copy link
Author

Alice52 commented Sep 21, 2023

manager层使用举例

  1. 提供原子的服务接口(供serverice进行编排调用): /GetUser 方法在不同终端具有不同得行为

    • 在 APP 中展示用户信息的时候,如果用户不存在,那么要自动给用户创建一个用户

    • 同时,要做一个 HTML5 的页面,HTML5 页面要保留之前的逻辑,也就是不需要创建用户
      image

    • 添加Manager层以后,Manager 层提供创建用户和获取用户信息的接口,而 Service 层负责将这两个接口组装起来

  2. 减小长事务且避免嵌套事务

    // service: 典型没必要得长事务
    @Transactional(rollbackFor = Throwable.class)
    public Result<String> upOrDown(Long departmentId, Long swapId) {
      // query 1
      // query 2
      // do update
      departmentDao.updateById(swapEntity);
      return Result.OK("success");
    }
    // service: 只进行
    @Transactional(rollbackFor = Throwable.class)
    public Result<String> upOrDown(Long departmentId, Long swapId) {
      // query 1
      // query 2
    
       xxxManager.upOrDown(departmentSort,swapEntity);
      return Result.OK("success");
    }
    
    // xxxManager
    @Transactional(rollbackFor = Throwable.class)
    public void upOrDown(DepartmentEntity departmentEntity ,DepartmentEntity swapEntity){
      // do update
      departmentDao.updateById(swapEntity);
    }

@Alice52 Alice52 changed the title [arch] mvcm [arch] 分层架构-mvcm Sep 21, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant