刚刚和一个哥们讨论晚longjs里面的ResourceManager如何做。(广告时间,广告时间,longjs,一个我们自己写的完备的JavaScript Framework)。
ResourceManager是一个负责多语言处理的类,使用它,可以很方便的实现页面的语言切换,而且对于不同的UI Control,也能够方便的使用不同的语言。
这里就出现了一个问题,就是对于ResourceManager有两大类的分类方法,locale和control
type,那么对于如何进行分类,我们有了分歧。我的想法是分两层,也就是第一层根据Locale来进行分类,然后再根据type分类。他则认为一次曾是
control type,然后是locale,或者干脆,直接传入两个参数来获得真正的resource。
此时,我们有了分歧,经过了很长的时间,做到了如下的统一。就是底层不管怎么写,实现都是无关的,并且,对于一个实用lib的开发者来说,get什
么,在什么语言下,他是不关心的,只要能够get出来一个String就可以了。我认为,从一个用户的角度,我使用一个语言,而不关心所有的控件类型是一
个很make
sense的事情。而且,大多数的实用,肯定是我的页面都是(绝大多数是)中文,或者英文。并且,此时,如果我添加一个法文的支持,我只要关心语言就可以
了。在语言资源的组织上,我只要en/control/*,fr/control/*,这样对语言的操作也是统一的。符合使用习惯。
并且,我觉得,当你做到
var localeManager = ResMgr.get(”en”);
var str = localeManager.getString(”key”);
var buttonManager = localeManager.get(”button”);
var buttonText = buttonManager.getString(”key”);
这样我在切换语言的时候,只需要修改一句话就可以了。
我哥们认为,这个可以都引用一个全局的变量,也可以实现修改一句话就可以
var globalLocale = “en”;
var mgr = ResourceManager.get(”button”, globalLocale);
var str = ResourceManager.get(”key”, globalLocale);
这样我觉得他的实现方式,虽然可以达到目的,但是却没有一个程序的完备性。
我所谓的完备性,就是一个(比如是OO的程序)框架,在只有自己整体的情况下,是可以完全的工作的。而一些比如环境变量,注册表之类的,都是辅助的,能够
更加的方便的实用的手段。而作为framework/library的开发者,在开发的时候,是不应该考虑这些的。因为如果总是这些方便的东西,肯定会自
然不自然的实用,最后用的地方过多,以至于不可控。当然在完备的基础上,适当的一些方便的用法和技巧,是允许的也是必要的。
作为一个framework/library的开发者,我认为自始至终应该保持framework/library的完整性,完备性,以及时刻想着用户如何使用更加的make sense,更加的方便。
0 Responses
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.