精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-04-05
有兴趣无时间啊,可悲...
关注,回家把Src下下来看看 |
|
返回顶楼 | |
发表时间:2005-04-05
robbin 写道 jdonframework不管怎么被骂,好歹还有人关注一把, Yan Container竟然连一点反响都没有,难怪ajoo急于使用激将法呢。
现在上不去sourceforge.net,还没有下载到jar,没有办法评论,只提几个问题: 1、好像没有文档呀? 目前只有javadoc。其它的东西比如为什么用ioc容器之类的 我发现pico的文档基本也够解释了。我的api和pico非常相似。 比如它是registerComponentImplementation, 我是registerConstructor。 它是getComponentInstance, 我是getInstance。 文档我正在考虑写,不过需要花点时间才能写的象pico那么漂亮。 robbin 写道 2、Yan相比于其他IoC Container有什么突出优点? 1。它不对type 0, type 1之类的做要求。你用你自己喜欢的。什么constructor,setter, static method, facotry method, abstract factory, reflection 甚至jndi都随你便。我觉得这才叫没有侵入性。 2。它提供的基于combinator的组件方式灵活优雅。比如,我最近看到的一个pico的maillist里面他们在探讨的一个问题: 要想对一个组件的某些部件做特殊定制,但是又不想让这些部件作为全局组件被别的组件看到。 他们设想用子container,用什么composer,搞得相当麻烦。 而在我的yan里面,不过是: container.registerComponent( Components.ctor(A.class); .withArgument(0, Components.ctor(B.class);); .withArgument(1, Components.ctor(C.class);); );; 这些针对参数的component自然就是局部的,你不主动把它register到container里面,别人是看不见的。 3。实现代码比pico更模块化,当然这点终端用户看不见。 robbin 写道 3、你做Yan是为了fun,还是为了啥目标? 本来没想做,就觉得pico不支持static method挺傻的,想着举手之劳给contribute一下,没想到看着看着pico的代码越看越不爽,于是想自己做一个。 |
|
返回顶楼 | |
发表时间:2005-04-05
nihongye 写道 引用 final Component x = Components.useKey("x")
.map(new Map(){ public Object map(Object x){ return ((X)x).add(1); } }); 可以控制Map map(Object x)所包装的实例为((X)x).add(1)调用的第一次结果的实例吗? 你是说,这个component在随后的调用中都返回同一个实例? 可以呀。就是一个singleton了。 final Component x2 = x.singleton();; 这个x2就满足你的要求。 |
|
返回顶楼 | |
发表时间:2005-04-05
引用 Components.useKey("x")
.map(new Map(){ public Object map(Object x){ return ((X)x).add(1); } }); 我是想着每次这样都返回同一个实例。 粗略看了下文档,看来很不了解这东西,有时间再好好看看,最好你写个使用手册。卡卡。。。。 |
|
返回顶楼 | |
发表时间:2005-04-06
nihongye 写道 引用 Components.useKey("x")
.map(new Map(){ public Object map(Object x){ return ((X)x).add(1); } }); 我是想着每次这样都返回同一个实例。 粗略看了下文档,看来很不了解这东西,有时间再好好看看,最好你写个使用手册。卡卡。。。。 什么是“每次这样”? 那个singleton符合你的要求吗? 就是 Components.useKey("x"); .map(new Map();{ public Object map(Object x);{ return ((X);x);.add(1);; } });.singleton();; 它保证这个component永远只返回同一个实例。 |
|
返回顶楼 | |
发表时间:2005-04-06
符合.
singleton的使用,应该是将其注册为一个singleton组件: container.registerComponent("abc",xxComponent.singleton()) 假若需要从singleton换成prototype,就只需要在一个位置修改。 map,list,array Compent的使用麻烦了,参照spring做些便利的封装。 比如 Compents.hashMap(String text,Type plainText) text传入 a=b|c=e 解析到ValueConpment并生成HashMapCompent. 另外HashMapCompent key不能是Compent? |
|
返回顶楼 | |
发表时间:2005-04-06
引用 Compents.hashMap(String text,Type plainText)
text传入 a=b|c=e 解析到ValueConpment并生成HashMapCompent. 这种封装可以做。但是可以在外围库或者第三方库做了。 毕竟没有一个标准的用字符串描述map的语法。 其实,直接调用java api本来就麻烦。这个java api和pico一样,是设计给库用的。所以结构统一灵活最重要。比如我的hashmap可以储存其它的component,具体的值只是一个特殊情况。 如果用jaskell做配置,就是这样了: hashmap {a=value"b"; c=value "e"} 也很简单啊。 引用 另外HashMapCompent key不能是Compent?
什么意思?key可以是任何东西,自然包括其它Component。 |
|
返回顶楼 | |
发表时间:2005-04-06
ajoo 写道 gigix,倒是有点问题请教呢。
关于open source。 1。是不是BSD的license就够好了? 2。是不是我必须在所有代码里包含那么大长段的copyright声明? 我原来没包括,现在一个一个类copy-paste想起来有点烦。 3。我的代码的注释是不是不能有公司名字? 4。你老兄批评jf那么犀利,也给俺来几斧子?放心,偶脸皮厚,要是不喜欢的,就装作没听见。 应该每个source file都有版权声明的,而且应该在根目录有licence文件。 你找个bsd的项目看一下别人的目录结构就知道了嘛。 有没有公司名字无所谓,但是你的版权声明必须清楚,让别人敢用。 |
|
返回顶楼 | |
发表时间:2005-04-06
引用 什么意思?key可以是任何东西,自然包括其它Component。
不好意思,没说明白。 我的意思是: 创建HashMapCompent里面的map时,它的key是通过keyCompent.create()所产生的,就像value一样。 顺便宣传一下:代码写得很干净,doc写得很详细,接口考虑得很充分(怎么能想得这么细致得?)。对象的创建方式的扩展性也超强,只要自己再写Compent就行了,显然,spring在对象的创建方式的扩展性这块跟yan不能相提并论啊,很不错的东西。比较有意思的有装饰Compent,这是spring所没有得。 |
|
返回顶楼 | |
发表时间:2005-04-06
在SetterInjectionComponentAdapterTestCase.testAllUnsatisfiableDependenciesAreSignalled
里面, 为什么一定要在Container里面注册一个List给A? 如果只想让Container通过setter为A注入已经存在的components, 应该怎么写代码? |
|
返回顶楼 | |