16 Star 155 Fork 45

临沂奥宏网络科技有限公司 / ulthon_admin

 / 详情

支持自动升级的架构

已完成
任务 拥有者
创建于  
2023-08-28 16:09

所有的逻辑和控制器,都放置恰当的钩子,以便开发者“定制底层代码”,钩子将达到的效果,是完全覆盖底层。

然后内置一个更新代码的脚本,将固定的文件更新到本地。

部分文件建议锁定,不修改,在开头注释中写清楚。

自动升级的意义不在于无缝的底层升级,实际上,任何底层的升级,都有可能破坏现有的上层的代码调用方式。自动升级的意义在于,大多数的功能都在优化底层、修复bug、增加底层方法、扩展底层方法,此类更新,下游用户应当积极跟进。框架更新的基本类型有:

  • 增加方法
  • 优化方法
  • 修改系统功能
    • 登录、权限、部门等

以上类型的更新,下游用户应当积极跟进。对于底层代码,提供扩展机制,以供下游用户定制同时不妨碍更新。对于系统功能,提供适当的事件机制,以供下游用户以扩展的方式定制,而不妨碍更新。

面对破坏性更新,即改变了原有方法用法的更新,应当提供完善的更新说明,让用户自行决定。

根据作者的经验,作者使用本框架实现了很多内部使用的项目,当面对新特性时,一般其他的项目也会需要这些特性,例如:

  • 表格增加了颜色预览方法
    等等。

本特性的另一个意义在于,随着框架的更新,后期的破坏性更新会越来越少,对于只是基于框架开发而没有对框架进行定制的用户来讲,自动升级很有用处。

事件埋点整理:

  • 登陆成功
  • 发送消息
    • 需要通知功能
    • 需要通知服务
    • 在服务中触发事件

事件埋点中,纯扩展功能,不影响主流程的,无需任何返回。

影响视图的,需要返回view_content,包含:

  • view_content

比如:

return ['view_content'=>xxx->fetch('login/ext/demo_login')];
return ['view_content'=>xxx->fetch('login/ext/ulthon_login')];
];

影响主流程参数的,需要返回vars,包含:

  • vars

比如:

return [$vars=>[xx=>xx]]

想要完全重写页面的,返回response,包含:

  • response

比如:

return [response=>Response]

但注意,此种方式会等所有时间执行完,返回最后一次的响应。

想要中断页面的,抛出指定的exception,此时按正常业务返回。

注意,并不是任何返回都有用,需要参考埋点针对返回内容做了哪些适配,比如在视图中的事件,只会处理视图的返回,其他类型不考虑。但一般情况下,抛出响应和相应参数都有效。

升级流程的基本功能:

  • 通过git或composer操作
  • 获取当前版本的代码
  • 获取当前版本锁定文件列表
  • 对比锁定文件是否发生变化
  • 获取最新版本的代码
  • 获取新版本的锁定文件列表
  • 新增、替换、删除代码

评论 (0)

augushong 创建了任务
augushong 添加了
 
新版设计
标签
augushong 修改了描述
augushong 修改了描述
augushong 修改了标题
augushong 修改了描述
augushong 修改了描述
augushong 任务状态待办的 修改为已完成
展开全部操作日志

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(1)
1529589 augushong 1578953767
PHP
1
https://gitee.com/ulthon/ulthon_admin.git
git@gitee.com:ulthon/ulthon_admin.git
ulthon
ulthon_admin
ulthon_admin

搜索帮助

344bd9b3 5694891 D2dac590 5694891