• 按键公众号 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:2021-12-03

按键精灵安卓版
立即下载

软件版本:3.7.2
软件大小:46.2M
更新时间:2023-05-10

按键精灵iOS版
立即下载

软件版本:1.8.0
软件大小:29.2M
更新时间:2023-03-21

按键手机助手
立即下载

软件版本:3.8.0
软件大小:262M
更新时间:2023-05-30

快捷导航

登录 后使用快捷导航
没有帐号? 注册

发新话题 回复该主题

[技术交流] 【院刊】-【201506期】据说擅于这样做的人都是脚本大神 [复制链接]

1#
本帖最后由 66球 于 2015-6-29 18:22 编辑

学会合理搭建脚本框架


原作者:兄弟工程师06 (按键学院基础班导师) 编辑:66球。。




本文按键学院提供技术支持



按键学院交流①群(1群已满):376122403

按键学院交流②群(2群):372671254

按键学院交流③群(3群):170084238


相信很多初涉大中型脚本编写的童鞋,都和小编一样,在开始写脚本的 时候往往都会
处于一个比较迷茫的状态,这个脚本要实现的功能这么多我到底应该先从哪个功能写起呢?
盲目的我们写着写着突然就发现写不下去了或者突然发现前面有什么功能没先写好,要回头写
这样往往会产生事倍功半的效果,那怎样才能杜绝此类情况,取得事半功倍的效果呢?
这就引申出了我们今天院刊的主题—学会合理搭建脚本框架

之前承蒙06老师为我们做脚本框架搭建培训,感觉受益匪浅,特此分享下~

[tr=rgb(154, 205, 50)]
为什么写脚本要先有一个框架

通常一个项目在不停更新迭代的过程中代码会越堆积越多,大量代码堆积在一起,不仅不便于阅读,也会极大的降低开发效率

因此实际开发中,我们会把整个项目按照一定的规则和顺序分成若干模块,每个模块对应整个项目的一个面,通过模块化的方式来降低整个项目的复杂度,这些模块按一定规则集成后就形成了一个框架;比如我们想做个英雄联盟自动挂机的脚本用来出售,首先它就应该考虑兼容性的问题,所以首先应该自动统一设置好相应的游戏和系统选项,其次应该考虑它进入大厅后的一个操作,具体是要打什么模式(人机or统治)不同模式对应不同的战斗AI、自动出装等等,那么它的框架大致可以这么搭建


您所在的用户组无法下载或查看附件

图上的这些模块化后的功能模块,按照一定的规则整合起来就形成了一个基本的框架


[tr=rgb(154, 205, 50)]
什么是模块化?

每个模块都是项目中的一个原件,通过原件的组合来形成整个项目,也可以通过多个原件组合成一个集成度更高的原件

打个比方,我们可以把整个项目想象成汽车,则组成汽车的每一个零件都可以算是一个模块,而发动机、制动系统、轮子等部分则是由各个更小的子模块组合而成的集成度更好的模块。

您所在的用户组无法下载或查看附件

图上的这些子模块组合形成了可独立的功能模块

[tr=rgb(154, 205, 50)]
哪些东西可以做成一个模块?

通用零件:

实现指定功能,拥有良好的适用性,大多数项目都需要,对应螺丝等标准件。


功能部件:

实现一系列的功能,将整个项目分割成几个内部访问不相干的部分,对应发动机等重要组件。


[tr=rgb(154, 205, 50)]
模块应具备哪些特性?

1. 可靠性:

模块必须保证自身能够可靠的运行,模块化开发降低了模块之间的关联,但需要考虑上层封装的稳定性。


2. 能独立工作:

模块间没有依赖,可独立执行,这样可以避免常规开发中出现的牵一发而动全身的局面,能独立工作的模块还可以支持复用特性,让代码越写越顺,越写越快越敏捷。


3. 非全局性:

全局环境被污染是非常棘手的事情,很多难以调试的BUG经常是由这个原因产生的,当我们使用模块化降低整个项目复杂度的同时,也应该考虑到项目维护所需要花费的精力,如果值得,那么应该对每个模块细化设计,避免日后可能带来的维护问题,在这方面,坚决不用全局数据是最重要的。


4. 接口、功能、逻辑、状态:

模块的四大基本要素,功能、状态、接口反映了这个模块的外部特性逻辑反映了它的内部特性


5. 低耦合性:

耦合性指的是模块与模块之间的关联程度,在实际开发中可能遇到多种模块依赖情况,如果这种情况没有处理好,做成了表面上的模块化,不仅起不到降低项目复杂度的效果,反而会加长开发周期。

有时候我们不得不让模块间产生耦合,在这种情况下,应首选关联程度最低的方法(非直接耦合、数据耦合),并通过代码分层的方式进一步降低程序的复杂度。


您所在的用户组无法下载或查看附件

LOL基本框架里的部分模块的数据耦合


[tr=rgb(154, 205, 50)]
什么叫代码分层?

根据业务关联、功能甚至模块独立工作程度等因素对代码进行归类,从而使模块间的关联由混乱的图结构变为清晰的链状结构,这种操作手法我们可以称之为分层,事实上一个大型项目不进行分层,未来的维护会变得非常麻烦,这也是代码编写所需要具备的基本素质之一。

您所在的用户组无法下载或查看附件


我们之前举例的LOL基本框架也有相应的代码分层:

您所在的用户组无法下载或查看附件


LOL基本框架里的部分模块的代码分层

[tr=rgb(154, 205, 50)]
我该怎样分层我的代码?

在多数情况下,对代码分层应考虑到项目的实际情况进行,这对于框架初学者来说很不友好,如果我们需要一个简单、便于控制的分层架构,大多数人都会推荐比较经典的三层架构。


三层架构指的是:应用层(表现层)→ 逻辑层(业务层) → 底层(数据层),应用层实现整体的封装和控制,逻辑层实现模块工作,底层则搭建了整个项目的基本运行环境和所需的函数。


三层架构可以很大程度上实现高内聚、低耦合的设计思想,也是目前的主流开发架构,显著降低不同代码层次间的依赖,在按键精灵中也很方便实施。


[tr=rgb(154, 205, 50)]
框架到底是什么?

在软件开发中,框架指的是整个软件的组织结构,用于解决复杂的问题。他承担着将代码分组件抽象化的任务,并阐明整套系统的体系结构,各个组件间的工作责任、依赖关系、工作流程和协作方式等关联。


框架将软件分割为多个组件,并抽象化每一个组件,使整个项目易于理解,能够形成一副工作与组件依赖的图像,从而使开发更容易执行。被分散的组件也降低了开发难度,可进行多人协作开发。


框架也是自然进化中必经的过程,大多数情况下,我们所使用的框架技巧都是在开发过程中逐渐积累经验形成的,甚至每个人都可能有一套独特的稳定开发方案,框架这个概念本身就是抽象的,但对于程序开发而言他的地位非常重要,好的框架可以加快开发速度,又能显著降低维护成本。



[tr=rgb(154, 205, 50)]
能不能举个例子具象化框架

多数动物由骨骼、脏器、肌肉组成,对这些生物而言,骨骼可以理解为他们的框架,各种组件围绕着框架进行搭建,最终形成了这个生物的个体。


但我们不能照搬自然中常见的框架形式,对于动物来讲,他们的框架是根据自己的生存环境专门搭建的,但也可能造成在他们的环境改变时强烈的不适反应,在软件开发中,框架应该作为项目的稳固根基,让项目在这个基础上,稳定发展超越,而不是一种限制,将项目锁死在框架的范围内,这种对比我们可以理解为好的框架和坏的框架。




[tr=rgb(154, 205, 50)]
说了这么多,框架到底有什么作用?

1.框架可以帮助开发者养成良好的习惯,并形成自己的开发风格,能避免停止开发一段时间后,自己看不懂自己代码的情况。

2.美如画的框架也可以方便他人阅读和理解自己的代码。

3.好的框架可以允许多人协作进行项目,并避免简单组合代码带来的海量BUG。

4.框架需要良好的管理思维和运营思维,这些思维正是部分程序员所稀缺的。

5.框架带来高度抽象的思维,有助于理解其他软件,甚至整个操作系统的运行机制,这些机制有助于使自己在技术方面获得突破。



[tr=rgb(154, 205, 50)]
后记

今天关于框架的介绍就到这里了,可能比较多抽象的概念不好理解或者有更好的见解欢迎跟帖指出~

其他相关连院刊

【院刊】-【201506期】如何养成良好的编程习惯~

【院刊】-【201408期】编写代码时,注释写还是不写

点此查看院刊总目录


谢谢大家阅读,记得给小编送支花花 ! 顺手点个


[tr=rgb(143, 188, 143)]

按键精灵交流群

腾讯课堂视频课程

按键学院交流①群(1群已满):376122403
按键学院交流②群(2群):372671254
按键学院交流③群(3群):170084238
安卓按键精灵交流群:115768679

按键精灵2014基础教学视频
Q语言零基础知识
按键精灵自动化脚本功能开发
按键精灵Q语言脚本开发
点我进入按键学院报名啦 招生细节进群咨询招生办主任


    已有5评分我要评分查看所有评分

    2#

    mmmoffice.ac登录

    3#

    谢谢大家阅读,记得给小编送支花花 ! 顺手点个赞

    4#

    学习学习学习学习学习学习

    5#

    13123

    这次我离开你,是风,是雨,是夜晚...
    6#

    据说擅于这样做的人都是脚本大神修改

    7#


    8#


    9#

    学习看看

    10#

    据说擅于这样做的人都是脚本大神

    11#

    学习学习

    12#

    赶紧来学习

    13#

    156165156

    14#

    有意义有意义一样一样一样一样

    15#

    缺少这方面知识

    16#

    谢谢大神

    17#

    的这些模块化后的功能模块,按照一定的规则整合起来就形成了一

    18#

    摩托one阿里郎

    19#

    这是如何古剑的呢

    [url][url=http://bbs.anjian.com/thread-576954-1-1.html]<strong><font size="4">按键精灵14周年庆典火热进行中!点击
    20#

    院刊就是好

    发新话题 回复该主题