`
文章列表
var Player = (function(){ Player = function(){ //这只是个空壳 throw new Error("Can not instantiate a Player object."); }; Player.MIN_EXTENDED_TIME = 1; Player.MAX_EXTENDED_TIME = 3; Player._player = false; Player.getInstance = function(){ if(!Player._player){ alert(&qu ...
http://cid-5b1e02933669f469.skydrive.live.com/redir.aspx?page=browse&resid=5B1E02933669F469!105&type=5
在JavaScript开发中,被人问到:null与undefined到底有啥区别? 一时间不好回答,特别是undefined,因为这涉及到undefined的实现原理。于是,细想之后,写下本文,请各位大侠拍砖。 总所周知:null == undefined 但是:null !== undefined 那 ...
没有规矩,不成方圆,JavaScript带来了灵活性,也带来了不受控的变量和访问,所以要用规则限制它。一支成熟的团队,还是一支新鲜的团队,规则应当是不一样的,我只是列出一些常见的或者有效的办法,来约束跳跃的开发人员,思维可以任意飞跃,代码却要持续受控。当然,任何规则都是建立在一定的认知基础之上的,面向对象JavaScript的基础是必备的,否则一切无从谈起。   变量和方法控制: 模块开发不允许存放独立的全局变量、全局方法,只允许把变量和方法放置到相应模块的“命名空间”中,对此的解释请参见此文。实在心痒了,那么使用匿名函数如何? (function() { var value = ...
进行JavaScript重构时,我希望引入易于使用的测试框架来保证重构的顺利进行,未来能持续通过测试代码对JavaScript逻辑的正确性做保障。 JsUnit (http://sourceforge.net/projects/jsunit/,http://www.jsunit.net/) JsUnit是一个独立的JavaScript单元测试框架,和JUnit差不多,没有上手难度,包括传统的setUp和tearDown,提供的assert方法也和JUnit类似,多了assertNaN和assertUndefined等等JavaScript特有的方法。测试页面必须在<head>里面 ...
前一节留下了一个问题,如果JS分门别类也清晰了,那我现在需要在必要的情况下才加载某一模块的JS,这个怎么实现呢?   方法一,最简单也是最容易被接受的方法,通过后台代码来控制,还是少些复杂的JS吧,通过一个标签、一个分支判断,就可以做到,何乐而不为呢?   方法二,如果要使用纯JS来控制,那么看看这样如何: $.ajax(){ url:"xxx/play.js"; …… success:function(res){ eval(res.responseText); } }   原理是很简单,不过有一个藏匿着的 ...
通常我们的团队中,开发人员在Java语言层面具备相当的技术素养,经验丰富,而且有许多成熟的、合理的规约,类型繁多的代码隐患检查工具,甚至在团队间还有计划内的评审和飞检。但是前端的代码不似后台,就像一个没人疼的孩子,不仅仅容易被低估、被轻视,导致质量低劣、可维护性差,技能上,更缺少优秀的前端开发人员。 JavaScript是前台代码中重要组成部分,随着版本的延续,产品越做越大,JavaScript层面的重构,需要在整个过程中逐步强化起来。   当代码量达到一定程度,JavaScript最好能够与页面模块组件(例如自定义的FreeMarker标签)一起被模块化。 模块化带来的最大好处就是独立 ...
做一个大型的WEB项目已有近两年,兄弟姐妹们总在忙忙碌碌中度过,看似很充实,可是当每个版本结束,我想我们又完成了一件大事,可是紧张的项目周期加上持续的加班,客户和一线还是对版本质量不满意。看到完成的作品时 ...
阶段一: 系统错误信息乃至错误堆栈被抛到页面上。 这是最原始的容错界面,在现在的网站中依然偶尔出现,这是糟糕的和不安全的,相信现在没有一个负责任的UCD专家会容忍这种现象的发生。   阶段二: 引导到简单的错误提示页面,例如:“系统忙”、“页面不存在”和“出错了”,或者一个简单的弹出框提示用户。 无论界面是美观还是简陋,这种方式都是原始的,并且是易于实现的。这是网站UCD的底线,如果您希望您的网站简单和质朴,那么这样实现并没有什么不好。   阶段三: 提示页面不仅仅是告知用户错误,还能够给出一定的建议,或给出一定的引导,以帮助用户在出错的情形下更快地修正错误,找到正确的页面。 ...
哲学上说变与不变,讲的是绝对运动与相对静止的道理,在代码设计中,也有许多变和不变之间的辩证故事。   有一些类在创建以后,整个生命周期内都不会发生变化,这种模式被称为Immutable Pattern。 较弱的不变模式:指的是 ...
但凡面向终端用户的产品,产品做大了以后,几乎都要涉及到基线能力和定制能力的划分。任何一个优秀的产品,都要经历从相对无序到有序的逐步成熟的过程。产品的发展总是要经历不断的阵痛,可是时间长了,我还是总免不 ...
先来说说对象数据库。定义参见维基:http://zh.wikipedia.org/zh/%E5%AF%B9%E8%B1%A1%E6%95%B0%E6%8D%AE%E5%BA%93 一个数据库的持久性整体规划通常都是不成套的。各种ORM(对象关系映射)工具都能更容易地进行对象和数据结构之间的转换,但没有一个是完美的。这就是通常所说的“ORM Impedance Mismatch(阻抗不匹配)”。于是吗,关系型数据库对于程序员的设计始终有相当大的限制,有的人擅长从领域模型去设计程序,有的人喜好从数据存储层面去设计代码。在对象数据库中,可以显式避免了一些传统关系数据库的使用方式,比如连表查询等,对于 ...

API风云录

好吧,我承认我是标题党,还是让我们从一个故事开始吧。 项目的业务逻辑层需要被设计成一个具备易扩展的模式,对外提供了大小相异的API。项目组人人头脑风暴,最后在各位的努力下,克服苦难,业务逻辑层被封装起来,一组最初的API被提供出来: 1、现有Service逻辑已经疏于管理,欠缺重构,变成了不易控制的逻辑层,接口众多,鱼龙混杂,难以规整出清晰、可用的接口给第三方(例如下游定制团队),怎么办? Web应用有个特点,当你对代码的管理缺乏控制而搞不定时,可以在其上封装一层,这是一个通用的解决办法,也是一柄双刃剑。 正如某同事“我们都是工程商人”所述,心底里可能我们愿意追求代码的曼妙和清晰,但是大多数 ...

Portlet

Portlet是基于java的web组件,由portlet容器管理,并由容器处理请求,生产动态内容。Portal使用portlet作为可插拔用户接口组件,提供信息系统的表示层。作为利用servlets进行web应用编程的下一步,portlets实现了web应用的模块化和用户中心化。portlet规范,即jsr(Java Standardization Request )168,是为了实现portal和portlet的互操作。它定义了portlet和portlet容器之间的合约,让portlet实现个性化、表示和安全的api集。规范还定义了怎样在portlets应用中打包portlets。 js ...
Web Service中转:暴露可通过XML和web协议访问的服务,并将对服务的请求转发给真实的服务组件。通常有许多Web Service是不希望暴露出来的,有时有一些服务又需要聚合起来使用,这时候就需要Web Service中转。在使用中转前的Web Service需要被改造,以支持中转的接口(例如一个本地接口)。这个模式和Facade很类似,只不过它的定位放在了远程接口上。   微架构:一组被同时使用的模式,用于实现系统中的一个特定部分(子系统)。每一个微架构是独立和内聚的积木块,由它们构成整个系统的架构。微架构有多种形式,比如Web Worker工作流。 工作流可以把业务逻辑和过程逻 ...
Global site tag (gtag.js) - Google Analytics