好吧,这坨shit是我一点一点堆起来的
项目背景:公司要开发一款APP,会有类似于老师,医生等多种角色,每个角色都可以使用该APP,但是展现的内容不同,类似于医生进去有医疗模块,老师进去有教育模块。但是大体的内容相同
为什么是屎山
问题其一:到底是多端拆分还是单端集成?
多端拆分:每个角色用单独的一套代码,单独部署,简单明了,不容易混淆,可以最大化的优化应用体积
单端集成:不同角色用同一套代码,可能会导致应用体积过大,有些插件只有个别角色用到的情况,还有就是需要一个良好的角色页面权限划分,还有就是相同的部分和有差异的地方要做到严格划分不出问题
屎山心路历程:一开始只有一个角色,理所应当的单端,这个时候埋下了后面问题的种子,没有从长远的角度来看待问题,当然出现问题的根本原因是我当时天真的想法,无非是多几个角色,多一个角色我多COPY一份代码,然后加上角色定制的功能不就行了吗?也就是这个天真的想法,在我加到第四个角色的时候,撑不住了,这种幼稚想法的弊端终于显露的淋漓尽致,暂且不提复不复制代码的事情,毕竟是一次性工作,主要是当甲方的需求不断变更的时候,有可能改动会辐射到每一个角色端,从而引发付出成倍的无用工作。而且根绝角色定制化的功能如果切割不好,一但影响到了各角色之间相同的功能模块,那就是天大的雷,我现在深受这个问题的困扰。
解决方案-初步:
1.重新整合功能模块,分角色通用和角色私有,角色与角色之间只在私有模块做区分
2.构建一个良好的根据角色定义分发私有模块的方法,这个方法要保证可扩展性,做到,可以很轻松的引入新的角色,然后拥有一套自己的私有模块而不影响其他角色的使用
3.让模块拥有更高的兼容性,模块通常会引入各种参数来完成依赖数据的注入,我想复杂参数大于简单参数,尽量避免只传一个值,而是传一组对象,如果我们只传一个值,那我们需要修改的地方不只是传值的起点,也就是从哪里传我们肯定要修改,但是现在没有接收这个值的位置,我们又要去修改模块,让模块接收这个值。这非常的不棒棒,如果传一组值,那么我们只需要在入口传递好就可以了,我们在模块上是可以直接用而不用去修改传递参数的定义,这很nice
解决方案-思考:
以上解决方案虽然满足了我们对于工作效率减少的幻想,但是权限的划分给了我们很大的挑战,有些模块,说通用也通用,说不通用也不通用,在功能上和通用模块一样,但是有些东西就是不让某个角色用,如何将这部分摇摆的模块控制好权限,是很重要的,用户不希望可以访问到意外的东西,我们也不希望不法分子会找到这些东西。
还有就是当项目大起来,角色多起来,如何保证这种越来越大的东西,不会变得很臃肿,像一个灵活的胖子,你看像淘宝,京东这么多功能的应用,我们的使用体验依然是非常好的,这就有很多我需要学习的地方