关于我们 - UIM Developer


项目介绍

UIM Developer 或许只是暂时的叫法,我们正努力在以往积累的成果中,将一些好的设计和思想沉淀出一个综合性的开发协作工具,并开放给技术社区。

目前主要是 minner 在维护,当然有不少之前的同事参与过前期的讨论和开发,也有几位朋友一直在使用并反馈,在此表示深深的感谢。

系统当前基于 PHP-7.3 + MariaDB-10.3 + NodeJS-10.15,使用了ThinkPHP-5.0和Layui-2.x框架。 已经包含了有:参数(枚举、权限、配置)管理、文件上传(秒传)、项目管理、模块管理、接口文档、模型管理、任务管理、Bug管理、模板管理等等功能。 简单看起来提供了一个快速开发后台的脚手架,实际我们要做的远不止这些。

肉眼所见的界面只是系统的一部分,更重要的其实是我们对开发过程中效率、质量的控制,以及对运维方式的创新。 而最重要的,是我们对技术服务工作的整体思考,以及独创的一整套的系统架构设计。

总结而言,我们打造的是:一个新颖的项目管理系统 + 代码托管平台 + 运维自动化平台 + 开发者联盟。

作者心语

一直以来,minner 总是希望有一个清新脱俗的技术解决方案,持以开放共享、大众受益的模式,让众多IT从业者不再淹没于低效的开发、测试、运维等工作中,更让技术的进步能够真正应用于实实在在的对社会有益的项目上,然而在各类商业模式层出不穷的当下,已经有不少人接受了“金钱至上”,中正难守。

我知道任何一件长久之计都不是随便施之,阳动阴随,事物不受滋养则难以生发,且仅凭我一人之力,恐怕任重而力微。相信亦有远志的你,定然愿意一起努力吧。

—— minner(lihuiming.cn

主要特色

零门槛 / 快速开发 / 团队协作 / 自动化运维 / 开放

成果描述

一、各种功能上的增删改查

项目(模块、任务、Bug)列表、参数管理、应用列表、角色列表、API列表、模板管理、事件和动作管理、文章管理等。 做这些不是为了用简单的增删改查来撑门面,大多都是在开发协作中或者系统整体架构中作为基础功能支撑,当然还会随着其他成果的需求不断增加。

二、统一接口管理

基于项目列表和API列表,团队成员之间可以互相以更加清晰合理的方式对数据接口使用统一的规范进行定义和描述。 接口按版本进行管理,当接口有新的版本部署,则系统可自动通知调用方开发人员。 如果同时使用我们的统一接口调用方案,则有配套的接口日志、错误日志审计等功能。

三、前后分离

虽然系统目前使用了ThinkPHP5.0框架,但并没有用到其提供的视图层,后端人员只需要专注于维护接口、数据、以及面向对象的方式管理函数。 而前端人员则全面的负责包括html/css/js在内的静态资源的开发,当然了,交互本就应该属于前端范畴,无论是本地的交互操作还是与数据接口的交互逻辑。

四、统一文件上传

不同后端人员对文件上传功能的安全意识很难同时站在一条水平线上,特别是当项目还没有意思到需要统一文件管理的时候。 前端同事也可能大显身手,在不同的功能中采用了不同的上传插件。 而当今无论是前端交互还是后端的处理,关于文件上传的实现都已经有不胜数的插件和方案,那我们又为什么要造这个轮子呢? 也许在有些前端眼里,不过是写了个JS上传插件,我干嘛不用其他的? 也许在有些后端眼里,不过是把文件保存到了另一台服务器上,又没什么难度,干嘛不直接用第三方的对象存储? 也许在有些架构眼里,不过是加了个秒传方案、存储服务器横向扩展嘛? 也许在有些运维眼里,不过是对文件下载加了权限控制和报表查看? 但是,在技术负责人眼里,他或许会看重我这个文件服务连同整套系统架构的可私有化部署,对文件上传后的 统一扩展处理 、以及无缝的系统升级服务。

五、开发过程管理

如果一件事情只做一次,那就简单的以结果说话,如果一件事情会反复的去做,大多数人会去关注过程的控制,毕竟更好的过程,利于得到更好的结果。 软件开发工作有许许多多的事情总是在反复进行,即使是只做一个项目,通常也会有许多次的迭代,而系统运维更是一种长期的工作。 将项目开发和维护过程中要做的工作和对缺陷的改进事项,以数字化的形式记录是非常重要的,这形成了我们对任务和Bug的管理。 使得每个人要做的和在做的事情都清晰可控,甚至可以形成让人更容易接受的能力评定和绩效管理。

六、开发质量管理

我通常假设一个项目的开发会有许许多多的人参与,请一定先认可这一点!如果你说你一个人负责整个项目,抱歉你和这个项目谁都不跟谁姓, 总有一天这个项目会需要有其他人参与,你也有可能参与到曾经只有一个人负责的项目上。抛开这些可能性不谈,就算你的项目真的只有一个人, 其实仍然要看成是多个人,因为去年的你和今年的你不是同一个人。刚从业?不用等一年,下个月你再来看今天的代码就知道了。 既然我这么在意要让这个假设成立,那么我到底要表达什么呢? 我经历过许多次的团队共同创作,我所遇到的所有情形,都是大家各自出招,不成套路,造成很多冗余、低效甚至无效的代码, 成员之间极有可能不经意就给对方挖了个坑,所以时而会听到感叹“一个人的话可能反而效率更高质量更好”。可能有的人经历不一样, 但大多数在中小企业工作过的人几乎都会有这种感觉。那么大型企业是不是就一定更好呢?其实未必,在方方面面都有些管理人员喜欢向世界500强企业去学习, 最终不一定会有500强的命,但很可能会先得500强的病。 而在“先提交一个能用的,后期再优化”这个问题上,无论企业规模如何都是可能会出现的,企业更关注的是效益更不是项目质量,除非质量被强行和效益发生绑定关系。 但只要出现质量问题总是要有人承担的,又有多少程序员愿意去把一个自己不了解的项目扶起来而不去建议推倒重来?谁统计过有多少工程师因为项目的现状离职和拒绝入职的? 因为项目状况离职和拒绝入职可能只是我的想象,但就算没有人会像我想的那样,那肯定也是准备好了进入一段难熬的过程。

我到现在也还只是在不断的摸索,已经做好了几个小的设计,个人感觉挺有意义:

1、前端与后端对涉及枚举类型的代码编写方式统一,不但可以避免使用魔术值,前端也不用把一个select里面的option列表复制得许多页面到处都是了;

2、后端代码管理,见“创新的后端开发模式”;

3、前端代码管理,见“完善中的前端开发模式”。

七、创新的后端开发模式

如果我仅仅说我已经实现了后端开发人员不需要配置各种环境,打开网页就能编写代码,大家可能会以为我说的是 WEB IDE ,确实我曾经有过做一个 WEB IDE 的执念,然而我依托现有的成果去看,发现并不需要那么重的模式,在整个系统架构合理的情况下,后端开发人员只需要编写接口函数、模型函数、公共函数即可, 使用一个网页版代码编辑插件,加上即时测试和发布,即可满足后端的业务开发需求!是的,我现在已经实现了。

八、完善中的前端开发模式

如果前端也可以像后端那样,仅仅需要关注业务实现,就太好了,那我在开发质量管理的问题上,起码是代码质量的可控上, 就算做到100%了,可惜前端情况比后端稍微有点不一样,但也正朝着这个方向完善中。我已经做好了一个简易的模板渲染引擎, 既可以在浏览器下使用,也可以在中间件上执行。并且在模板管理功能中,也已经可以直接在线编辑视图模板了。 在提高开发质量,代码可控的同时,加上我独创的前后分离,数据和视图模板由中间件异步完成渲染,并最终传输到nginx页面服务器。 因页面服务器上全部是静态页面,即切断了安全问题,又可使单台服务器的负载能力提高十几倍甚至几十上百倍。

九、系统监控、日志报表

为了保证系统中各子架构的稳定,需要实时对运行各项系统服务及进程的容器进行监控,避免单台实例负载过高,以及故障排查。 前端JS的报错信息、用户端对接口的调用记录、客户端与SOCKET服务器的连接次数、在线时长、当前浏览的页面地址、 以及来源IP、SESSION、referrer等信息都可以形成访问报表,以原生支持的形态,超越第三方的统计插件。

十、前端应用初始化及缓存更新控制

实时控制前端应用的初始化操作代码以及缓存更新,实现更灵活的灰度发布。

十一、分布式服务,自动化横向增加

系统中目前定义了四种服务器(全部采用容器化部署):

接口服务器(用于部署后端代码,外网隔离)

文件服务器(提供文件的上传和下载)

SOCKET服务器(提供长连接服务和实时推送)

页面服务器(提供静态页面访问)

仅仅定义这四种服务器是不够的,例如我们对云数据库的设计还在进行当中,初具成果时会向社区宣布。

我们要做的不仅仅是将各种服务分别架构和功能隔离,更是为了在需要的时候能够由系统自动的在集群中增加某一种类的实例数量, 比如文件服务器假如只部署了一台,运行几个月后发现磁盘余量告警了,或者是提供下载的文件太多带宽告警了,可以立即再创建一台文件服务器, 对应到业务方面,即新的文件上传请求会提交到这个磁盘余量更大的服务器上。 文件服务在设计之初就已经是照着可横向增加的方案去实施的,而SOCKET服务也早已经对横向增加有了初步的实现, 只是API服务和页面服务仍然不时会去思索究竟该采用哪一种实现方式,相信在不久的将来我们便能沉淀出合理、完整而又可靠的方案。

更多成果的推动方案

为了避免因为我个人的偏执和在知识方面的缺陷导致某些成果的不合理、不健全,同时为了丰富、细化和深入现有成果, 并实现更多可通用的成果,我计划将本套系统开源,开源的计划还在实施当中。以开源方式推动更多成果的目的又是为了更大的理想。

开源计划方案及更多信息请跳转 开发者社区 了解。

支持我们

如果您对我们的研究方向和现有成果表示认同,并且觉得对你有所帮助,我们愿意接受来自各方面的捐赠*_*

支付宝捐赠(或备注为充值,格式:“UIM充值 + 手机号”,充值金额需为10的倍数):用手机扫描二维码支付

您的捐款或充值将被用于:

1、持续和深入的开发

2、建设配套的技术社区

3、租用更好的带宽

4、奖励团队的杰出贡献者

5、团队的宣传和壮大,以及社区活动或讲座

查看捐赠列表

最后

UIM仍在发展初期并将长期处于活跃的更新当中。

如果您有意加入我们,请搜索QQ群1023317158,或者去博客了解更多 https://lihuiming.cn/