关于系统开发(软件工程框架构建)的一点迷思
Posted blind_mokey
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于系统开发(软件工程框架构建)的一点迷思相关的知识,希望对你有一定的参考价值。
引言:凡事预则立,不预则废——《礼记·中庸》
一、打个比方
最近项目开发多了,正在接近预设的目标,并且在预设的目标上面添加了无数的新东西,但是系统也出现了一些问题,比如开启APP卡顿,加载图片缓慢,页面切换响应延迟高,以及动作画面渲染掉帧的问题。老板让我这个项目框架搭建人总结一下什么原因造成用户体验那么差,并且导致用户差点想骂娘,打击感没体验到,打开发的感觉就先有了。我回答老板说:我们现在开发功能等于在一座上世纪九十年代,基础设置都没有的烂尾楼里面搞重新开发,吸引年轻人来买房,底层框架不合理,再精装修都是危房。老板听不懂,算了。我就来总结几点问题把。
二、论有效文字
项目策划的文字功底很好,项目初期交给我一本字数达到1.4万并且还没写完的项目策划书给我的时候,我第一反应是佩服,小兄弟肯定肝了几个日夜才肝出那么多的字。我又花了四五个小时仔仔细细地看这个1.4万字的策划书的时候,一脸茫然,这只是写给甲方看的吹水用的文字介绍书,真正对项目实施开发有用的内容少之又少,我节选一段:
“这是一款高度自由的,所见及所得的,看到的东西都可以破坏的,没有约束性战斗的,可以让你发挥尽情想象力的一款多人在线大型及时性战斗社交游戏,可以让你在无尽的荒野中享受酣畅淋漓的战斗快感”
对于开发来说总结得出如下内容:1、没有空气墙 2、允许多种破坏体存在 3、MMORPG 4、有社交系统
再凝练一下主要核心功能:1、地编主题为荒野 2、玩法主体为战斗与破坏 3、支持多人在线并附加社交系统
其实作为项目策划人,没必要设置那么多介绍性文字,给到开发手上你只需要理清楚核心功能是什么,核心功能包括哪些子功能,几个核心功能之间是如何关联的,子功能之间又有什么关联就行了,最好形成一个表格,一目了然,让项目开发跟进表格开发。
三、定主体
书接上文,我看懂了你的策划案,给精简之后,需要定义这个项目的核心功能,比如企鹅的亡者农药,它这个游戏的核心功能就是MOBA战斗,那么在这个主功能上进行主要角色的划分,主要角色有一百多号英雄,那不可能做一百多个表格吧,实际上没那么麻烦,他们是按大类来分的,就和我们面向对象编程里面定义好父类是什么,class hero,然后实例化一个对象
new Xiangyu=hero(name='xiangyu',type='warrior',main_thin='strength')
这里是举个例子,定好父类,再接细节配置,最后定义这个英雄的技能效果。
那么技能效果怎么来呢?难道你每个英雄都重新写一次技能效果?当然不是,定好主体框架,技能效果就那样,比如:伤害、治疗、控制、范围,伤害:魔法伤害、物理伤害、真实伤害 治疗:百分比治疗,AP加成治疗,生命恢复治疗…… 控制:眩晕、定身、沉默、击飞、嘲讽,定好这些主体技能框架再复用进入英雄的技能里面,再对范围定义一下,范围有:圆形*面积,长条*面积,扇形*面积等等巴拉巴拉,只有通过高度凝练的主体抽象框架与复用接口,才能保证系统的稳定运行
那么在上面描述完毕,举个LOL的经典英雄例子——发条魔灵,它的主体框架就是:英雄——法师——长手——伤害——护盾——带球——击飞+聚拢控制,是不是这个英雄的设计理念就出来了,没必要巴拉巴拉说几千个字的英雄设计描述的,这是费程序员的行为。
四、定数据
学过数据库原理的人都知道,数据字典的7要素,我就不赘述了,但是构建一个科学的系统,需要用到一个高效的数据库,高效的数据库从一开始就应该定义成高效的,那么问题就在哪里呢?定义好数据字典,简单、直接、确定、可靠、安全,这些是数据字典的要求。
一个优秀的项目框架对自己的数据应该有一定的预见性,一般用得到的都要考虑周全,比如定义用户数据库,除了定义基础的姓名性别ID年龄身份权限信息之外,还要考虑到用户状态、用户类别、用户社交关系、用户可扩充性等等。
五、定主流程
上面的东西已经预备好了,那么应该开始定项目的主体流程了,主流程是最核心的功能,所有子功能都是围绕主流程进行展开的,主流程的特色足够,子功能的吸引力也会更大,讲句真实的话就是你游戏好玩了我才肯掏钱,当然那些有钱没钱都玩你XX的游戏,用户黏度肯定不行,但是人家捞一波就走你也没办法。言归正传,定义核心功能与围绕核心功能的子功能一定要前期定义好,不要出现歧义,不要出现自相矛盾,要有确定性、可行性、有效性以及可复用性。
电子游戏史上最伟大的MOBA游戏 DOTA(因为它是代表作,后面所有的MOBA都是围绕它来创新的,说它最伟大不过分吧)创造了一套及其吸引人的核心功能——推塔,只要想尽办法把对手的基地推爆了你就赢了,为此玩家开发出了无数的战术,都是围绕核心这个点,而程序员开发这个游戏系统也围绕这个功能并且将它维护,比如曾经的美杜莎后期无敌,河道狗男女见人杀人,炸弹人对新手不友好等问题在后续的改进中为了不破坏核心功能的稳定性,都进行了一一的维护。再到后来的DOTA2,LOL,农药等,把这个核心功能做好了,然后玩家想打游戏酷炫一点,买皮肤,充!玩家想要稀有皮肤更酷炫,充!玩家想改名字让自己社交更有面子,买改头像,买表情,充!……只要核心功能主流程走好了,随之而来的其他子功能围绕核心功能展开,也好开展了。
再举个反面例子,某三亿人的梦想游戏,一开始的核心是刷图,玩家为了更好的刷图肯定要做更好的装备,那么这个游戏的核心流程就成了刷图打装备——变强——更快的刷图,当年笔者也是一名上瘾份子,后来它在老板的想法下大变模样了,变成了:你只有花钱了才能有资格买装备——你花钱把买的装备强化了才能有资格刷图——你刷图得不到任何奖励——唉我版本更新你花钱买的装备全废了,你还得花钱重新买装备。妈耶这可不兴搞啊,在这个框架的基础上彻底改变了流程,就很不合适了,所以惹来了无数人的骂名。
综上,主流程定义好了,在这个基础上进行开枝散叶的开发,就会让项目生命周期有效延长,提升用户黏度,提升项目价值。相反,主流程定义本来就不好,还反复更改,只会让自己的项目生命周期大大缩短。
六、拒绝乱加功能
我们老板有一个毛病,对于一个项目想到什么新功能就提一嘴,然后再提一嘴,不形成有效的文档,一开始一个同事听他的话照做了,后面老板不承认自己要那个功能,他没说过,可是底层框架已经因为这个一嘴功能做了很大变更,要想再退回原来的设计可能会伤筋动骨,而且每次老板有新想法加功能都有可能推翻之前的想法把原来搭建好的底层框架翻工,最后有一天我直接怼老板说你不要想到什么就说什么,我看着别人改代码乱改东西烦死了,你老老实实写好文档写好需求书写好功能流程或者介绍写给我(我是这个项目的总管),我觉得可行就给你弄,不可行直接否决,否则在这个已经接近完工的框架下面又翻工重来又乱加新功能,会造成无用开发甚至系统崩溃。老板再也没有乱提过新需求,都是写好文档过来我们讨论过一轮才决定做不做的。
一个好的项目,要考虑新功能加上去的可行性、有效性,以及对原有功能的影响,如果一味的乱加,就会和开头说的在烂尾楼上面翻修搞精装修一样,看起来好看实际上摇摇欲坠,把控好项目进度与整体框架的稳定与安全,是一个软件工程框架构建的重要因素。
好了,说了那么多,最后几句话帮你们省流量解决过程:
七、总结
软件工程框架构建的几点总结:
1.前期策划要凝练有效文字,一步到位说明要开发什么功能
2.架构师要确定软件系统主体功能,模块与模块之间的关系
3.数据库工程师要确定该系统有效的、全面的数据字典,方便数据交互
4.开发工程师要确定项目的主要流程,围绕主流程来开发,把流程变成可行、可靠、确定的代码
5.学会拒绝乱加功能,框架的稳定与高效运行,要做大最大程度的精简,省去不必要的功能才会有更好的体验
凡事预则立,要预,更要预好,不要乱预,那么软件工程的架构就会平稳有效的进行,并且更容易达到预期效果。
以上是关于关于系统开发(软件工程框架构建)的一点迷思的主要内容,如果未能解决你的问题,请参考以下文章