小议JavaScript泛式框架架构的逻辑形式

作者:leecade 来源:51js 时间:2010-07-02 12:55:00 

by leecade :

我聊下我的想法

从功能上看,能不能把JS分成3层结构

1 语法设计,选择器,常用函数

2 业务逻辑(比如封装好常用的TAB啊 BUTTON啊 这些控件和抽象的功能类)

3 注册方法绑定事件等

------------------------------------

第一层结构

核心是设计语法,简写选择器,扩展常用函数;命名空间采用$

语法形式的设计,表达最简单的逻辑:

---------------------------
谁.要做什么(怎么做)
---------------------------

参考JQ 的API设计

$(who).what(how)
---------------------------

a.关于who

如果who是string的形式 则用选择器(推荐MINI选择器,简单缩写就行了,条件判断等还是应该在函数内处理)获取对象

如果who是 对象的形式,则是包装此对象以应用内建常用函数的方法链

如果who = "Ready" 则是应用 DOM Ready 方法

b.关于what

同样是参考JQ的语法实现链式写法

例: $("id").blind("click",function(){...}).show()

c.关于how

常用函数的自定义参数,没什么好说的

第二层结构

语义上不是描述方法而是描述对象,命名空间自定义 比如 Mail

API 上 我觉得使用NEW关键字还更清晰

比如 var btn = new Mail.Button

by Ozone:

站在系统论的高度并不准确的通俗宏观:
      浏览器环境中的JS编程由JS自身、DOM数据输入、DOM数据输出组成,前者是主体,后两者是辅助,数据从DOM中来——经过JS处理——到DOM中出,JS数据处理的实质是计算,不外乎数值运算和逻辑运算,框架首要考虑的问题应该是JS主体抽象问题,其次才是输入输出简化。
      框架应该尽量方便使用者思维“WHAT TO DO”,不被“HOW TO DO”所纠缠,把“HOW TO DO”与“WHAT TO DO”分开,从而回归“计算(运算)”这一语言的本质。
例如:

//-------- how to do ? -------------
Array.prototype.each = function(closure){
      return this.length ? [closure(this[0])].concat(this.slice(1).each(closure)) : [];

function map(symbol, list){
      return list.each(Function("x", "return x" + symbol))
}

//----------what to do ?-----------
var list = [1, 2, 3, 4, 5];

alert(map("+1", list)); // [2, 3, 4, 5, 6]
alert(map("-1", list)); // [0, 1, 2, 3, 4]
alert(map("*2", list)); // [2, 4, 6, 8,10]
alert(map("&1", list)); // [1, 0, 1, 0, 1]
alert(map("^1", list)); // [0, 3, 2, 5, 4]
alert(map("=1", list)); // [1, 1, 1, 1, 1]
alert(map(">>1", list));// [0, 1, 1, 2, 2]
alert(map(">1", list)); // [false,true,true,true,true]

alert(list); // [1, 2, 3, 4, 5]
      现在不少学习书籍,开始就来个“hollo world ”,然后是没完没了的繁复的“HOW TO DO”实例,没有宏观的明细的语言体系把握,学人(特别是初学者)看得一个头两个大,晕头转向实属正常,不晕才怪!


 

标签:框架,javascript
0
投稿

猜你喜欢

  • 解析:轻松掌握 字符串文字字符集和校对

    2008-12-17 17:07:00
  • ASP实现数据输入、查询的实例

    2010-05-03 10:48:00
  • 打造设计你自己的字体 Ⅱ

    2008-03-14 07:48:00
  • 写SQL语句的经验

    2009-04-13 16:02:00
  • 如何用SQL语句来建表?

    2010-06-13 14:38:00
  • 无序列表 li ul

    2008-07-29 13:00:00
  • js字放大效果

    2010-09-07 12:18:00
  • Oracle RMAN快速入门指南

    2010-07-18 12:50:00
  • 批量更新存储过程所有者

    2010-07-15 21:14:00
  • [图]关于网站开发中缓存 cache应用

    2008-08-19 18:14:00
  • SQL Server 2008的一些新特点及独到之处

    2009-01-15 12:59:00
  • ASP利用TCPIP.DNS组件实现域名IP查询

    2010-02-26 11:25:00
  • Sub-Pixel Bug?!

    2010-03-24 18:09:00
  • asp检测文件编码方法

    2007-10-03 14:27:00
  • Yahoo!网站性能最佳体验的34条黄金守则——JavaScript和CSS

    2008-05-29 13:34:00
  • 网页设计中怎么将px换成em

    2008-04-16 13:50:00
  • 47个惊人的CSS3动画演示

    2010-02-07 12:32:00
  • 淘宝2011新版首页开发实践

    2011-01-20 20:07:00
  • mysql 错误:ERROR 1045 (28000): Access deni

    2010-09-30 14:48:00
  • 利用JavaScript正则表达式模拟Google Talk的文本处理

    2007-12-04 18:43:00
  • asp之家 网络编程 m.aspxhome.com