应用级 - JS的简单分层
2016-06-27 15:36
429 查看
基础级 / 进阶级已经无法概括这篇文章的气质,上图:
咳咳,言归正传,这几日忙于写JS小游戏,大量而繁杂的JS变量、接口,以及HTML5环境下,JS的重要性,这两者令我有写出这篇文章的想法。
首先声明,JS作为脚本式语言,肯定是无法和完全OOP的语言相媲美1,本文也无意去做这样的用功。我们希望通过设计模式的一些浅显思想,来完成JS模块的初步优化。
MVC显然是一个拿来急用的好东西。将JS简单分为三部分:控制层、模型层和视图层——显得不伦不类,那我就二次修改吧。控制层依然负责调用,模型层则写入大量的数据处理的原型,视图层取消掉,取而代之的是数据层。
数据层介于M与C之间,是控制器接受请求之后,传入模型层的数据集,这样的规划可以最大程度保障模型层代码的功用。
个人拙见,将任何核心功能代码写死,都是相当糟糕的设计。一个核心功能,应该能在相当程度上保证自己的健壮性。
首先是功能,在0.11v中,我加入了税收,当时设定了三种税务,并且基本上都写死了具体内容。后来,游戏内容开始横向拓展,税收需要一种更有弹性的设计方式——税收品种增多。
如此优化之后,不但代码本身少了很多,而且接触了写死的绑定,正交增强。接下来,无论是拓展个性化的收税提示,还是增多税种,都只是业务层面的问题了,Core已经完成。
相信到这里,分层的好处已经清晰体现了。
最近接触了一些HTML5的讯息,JS、Canvas、前端框架,才会愈发感触到“应用型Web”的意义与好处,尽管无法预料编程本身是否都向着应用去发展,可一个漂亮而简单的划分,可以让编程者的心情好很多。
肯定会有大牛对我的看法不屑一顾,但对目前的我而言,显然是无法将JS运用自如的。 ↩
咳咳,言归正传,这几日忙于写JS小游戏,大量而繁杂的JS变量、接口,以及HTML5环境下,JS的重要性,这两者令我有写出这篇文章的想法。
首先声明,JS作为脚本式语言,肯定是无法和完全OOP的语言相媲美1,本文也无意去做这样的用功。我们希望通过设计模式的一些浅显思想,来完成JS模块的初步优化。
架构
没有学过架构,也没用看过关于架构的书,却来妄谈架构,在大牛眼里一定是非常狂妄的,但毫无疑问,一个连简单分层都没有实现的JS代码簇,是相当紊乱的。MVC显然是一个拿来急用的好东西。将JS简单分为三部分:控制层、模型层和视图层——显得不伦不类,那我就二次修改吧。控制层依然负责调用,模型层则写入大量的数据处理的原型,视图层取消掉,取而代之的是数据层。
数据层介于M与C之间,是控制器接受请求之后,传入模型层的数据集,这样的规划可以最大程度保障模型层代码的功用。
个人拙见,将任何核心功能代码写死,都是相当糟糕的设计。一个核心功能,应该能在相当程度上保证自己的健壮性。
具体设计
本人这款小游戏简单的将JS代码分为功能(function)与控制(controller),数据不算多,集成在controller.js。
首先是功能,在0.11v中,我加入了税收,当时设定了三种税务,并且基本上都写死了具体内容。后来,游戏内容开始横向拓展,税收需要一种更有弹性的设计方式——税收品种增多。
// 工/商/人头 税 var tax = (function() { var pollTax = function() { var taxValue = get('population') * 0.03; purseSub(-taxValue); var message01 = '<div>您收到人头税金,合计:' + parseInt(taxValue) + '</div>'; message.plus(message01); message.output(); }; var commerceTax = function() { var taxValue = get('market') * 0.19; purseSub(-taxValue); var message01 = '<div>税金到帐:共' + parseInt(taxValue) + '铜币</div>'; message.plus(message01); message.output(); }; var industryTax = function() { var taxValue = get('plant') * 0.15; purseSub(-taxValue); var message01 = '<div>''税金收取完毕,合计:' + parseInt(taxValue) + '铜币</div>'; message.plus(message01); message.output(); }; return { pollTax : pollTax, commerceTax : commerceTax, industryTax : industryTax }; })(); // 税,改变后版本 var tax = (function() { var Tax = function(taxName, taxKey, taxPoint) { var taxValue = get(taxKey) * parseInt(taxPoint); purseSub(-taxValue); var message1 = '<div>' + taxName + '税金到帐:共' + parseInt(taxValue) + '铜币</div>'; message.plus(message1); message.output(); }; return { Tax : Tax }; })();
如此优化之后,不但代码本身少了很多,而且接触了写死的绑定,正交增强。接下来,无论是拓展个性化的收税提示,还是增多税种,都只是业务层面的问题了,Core已经完成。
相信到这里,分层的好处已经清晰体现了。
结语
上述的分层是相当粗略为简单的,肯定有更好更优秀的分层方式(譬如MVVC——尽管相当多的后端大牛吐槽MVVC是半成品,但不能否认这是前端的进步),希望大家也能在自己的编程经历中,总结出一套适用于自己的分层方式。最近接触了一些HTML5的讯息,JS、Canvas、前端框架,才会愈发感触到“应用型Web”的意义与好处,尽管无法预料编程本身是否都向着应用去发展,可一个漂亮而简单的划分,可以让编程者的心情好很多。
肯定会有大牛对我的看法不屑一顾,但对目前的我而言,显然是无法将JS运用自如的。 ↩
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享