mass种子模块看完了
作者当然也不容易,要考虑各种兼容问题,要考虑效率问题(他真的考虑过吗,我表示强烈怀疑,貌似仅仅是风格上模仿其他源码)
相当无语。
本来我是知道的,代码 调试的过程中逐渐完善,逐渐与各种兼容问题和预想不到的bug打交道,原先严谨的结构都会渐渐腐烂,但是作者的结构,真的不是很严谨。
因为有些设计,完全是为兼容性而来的,所以有些即使没有理解,我也不去理解了,毕竟,我没有打算去维护这套代码。
我还是就这套代码的利弊进行一下总结吧。
1.命名一定要有意义,如果是临时起的无意义的名字,那么后期重构的时候要改成有意义的。有些如checkdeps,这是什么意思,有些代码基本上是为了解决兼容性问题的,起名字的时候,就不能按照代码内容来起,因为读者并不知道你所熟知的那些兼容性问题。有时候定义了若干重名的变量,比如id=xxx?id:yyyy之类的,然后又用url 作为复杂ID,又如闭包内外变量重名,造成了后来维护者的极大混淆。
如果你指望别人来维护这段代码,请不要出现ID,LIST,ARRAY这样的变量,哪怕是作为临时变量也不行。光看一个函数还可以,看多几个乱得一塌糊涂。
命名应根据功能,作用来命名,而不应根据细节来命名。
2.跟命名一致的,代码功能问题。 全局变量的使用,可能在所难免,但请务必一点,把兼容和非兼容的代码分开。正常代码考虑兼容问题,几乎必然会违背单一职责原则的。兼容代码里尤其会有各种拼凑写法,巧合写法,这些最好和正常的逻辑处理分开,尤其是复杂的逻辑。应设法使逻辑和兼容分离,逻辑独自封装一块。
数据结构的设计尤其不应考虑兼容问题。 否则你的框架就跟某个版本的浏览器高度相干了,后人想改都改不过来。代码的复杂是有序的,有限度的,兼容性的复杂是无穷无尽的,无规律的。没必要做什么url命名,多个不同版本报错问题,现在明摆着,你一个版本都还没做出来,那些使种子模块过早的陷入一种想象出来的复杂需求之中。
两个不同版本的模块加载,得不到正确结果,这是必然的,无法根除的。
你的代码要跟jquery拼效率那是不可能的事情,如果要后人还能维护,请一定不要跨若干个层级的函数调用全局变量。
有节制的使用全局变量和闭包,使用前一定要考虑好,为什么在这个位置要用,有什么好处,最大的好处莫过于可以封装一整块功能。
复杂结构最好一次性定义完,不要在程序流行过程中断断续续的添加。
mass种子模块看完了的更多相关文章
- mass种子模块之domready
总结:由于IE6/7/8不支持DOMContentLoaded事件,虽然它支持onreadystatechange事件,但是readyState=complete几乎和onload事件一样,需要等页面 ...
- 痞子衡嵌入式:ARM Cortex-M内核那些事(3.2)- 安全模块看特性(M23/33/35P)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是ARM Cortex-M功能模块,不过侧重点是三款安全特性处理器. ARM Cortex-M处理器家族发展至今(2020),已有8代产品 ...
- <c ss高效开发实战>看完了,Bootstrap学习是关键
Bootstrap果真给我们带来了很多便利,学习CSS,必须要掌握很多框架和快速学习的方法. 这本书看完了,也写过几篇读书笔记,墙裂推荐.不上书封面了,只上书的导图. 这里说几点学习CSS的心得 1. ...
- 终于把你必须知道的.NET看完了
终于把你必须知道的.NET看完了,第二步就是把精通ASP.NET MVC3框架这本书搞定,练习MVC3的使用,并把EF,LINQ也练习一下,期间要做一个项目“多用户微信公众平台”项目,最近微信公众平台 ...
- C#本质论第四版-1,抄书才能看下去,不然两三眼就看完了,一摞书都成了摆设。抄下了记忆更深刻
C#本质论第四版-1,抄书才能看下去,不然两三眼就看完了,一摞书都成了摆设.抄下了记忆更深刻 本书面向的读者 写作本书时,我面临的一个挑战是如何持续吸引高级开发人员眼球的同时,不因使用assembly ...
- 跌跌撞撞的看完了《jquery技术内幕》
今年2月20日买的书,今天是5月26,三个月来,除了周末休息一天,如果没有特殊情况,我都会每晚花两个小时看这本书,以及查各种与jquery源码相关的资料.今天总算是跌跌撞撞的看完了,有点小激动,也有点 ...
- 刚看完了一本关于javascript的书感觉受益匪浅,原来不懂的东西这么多,想问问怎么成为大神?求教!!!!!!
刚看完了一本关于javascript的书感觉受益匪浅,原来不懂的东西这么多,想问问怎么成为大神?求教!!!!!!
- JS框架设计之命名空间设计一种子模块
命名空间 1.种子模块作为一个框架的最开始,除了负责初始化框架的最基础部分. 2.种子模块作为框架的最开始,那么什么是种子框架的最开始呢?答案是IIFE(立即调用函数表达式); IIFE(立即调用函数 ...
- primer看完了
放假这将近十天吧,终于把C++ Primer中文版第五版大致看完了,然而第四部分(高级主题)还是没有看,感觉那是需要有足够的项目经验再看. 另外,看一遍肯定不够,忘得也会很快,我十分确认今后还会很多次 ...
随机推荐
- linux command1
#列出指定用户(当前用户)的组信息 groups #将指定的用户添加(-a)到指定的组内(改组必须已经存在)或指定用户从指定的组中删除(-d) gpasswd –a/-d username grou ...
- 优先队列(挑程)poj 2431
每次写poj的题都很崩溃,貌似从来没有一次一发就ac的,每次都有特别多的细节需要考虑.还有就是自己写的太粗糙了,应该把每种情况都想到的,总是急着交,然后刷一页wa. 优先队列直接用stl就可以,简单实 ...
- HDU 1716:排列2(全排列)
排列2 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- Linux安装模式AppImage,Flatpak,Snap整理
本文只谈Linux世界用户较多的前2大主要分支, RedHat Red Hat Enterprise Linux 简称RHEL rpm (RedHat, CentOS, Fedora, Oracle. ...
- 《DSP using MATLAB》Problem 6.6
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- Go Example--变参函数
package main import "fmt" func main() { sum(1,2) sum(1,2,3) nums := []int{1,2,3,4} //nums. ...
- Redis 5.0.0 releases notes
Redis 5.0 release notes ======================= ---------------------------------------------------- ...
- Python知识点整理,基础3 - 字典操作
- 【BZOJ2427】【HAOI2010】软件安装
无力吐槽…… 原题: 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最 ...
- mysql自增主键
MariaDB [test]> create table test1(id int primary key auto_increment,name varchar(20))auto_increm ...