已经有点感觉用ioc container来说明co不见得是个好主意了。
这个container的例子举出来,明显提出意见的人比那个简单的logging例子少了很多。
毕竟连pico是怎么回事,怎么用,很多人都还不见得了了。更不提多少人对pico的用法就是一个很in的fancy factory。买椟还珠。
不过,既然开始了,让我还是有始有终吧。
这章还是让我们看看co的refactor。
其实,很多人问:怎样把握co里面的基本组合子的度;什么样的组合子算是基本;怎样做到正交;多少的基本组合子才算够用;怎么知道这个组合子会被用到等等。
其实,答案都来自重构。
没有谁一下子就作对的 ...
- 12:42
- 浏览 (2490)
- 评论 (0)
其实,前面我还忘了提一个非常重要的基本组合子:singleton。
这里补充提一下:
[code:1]class SingletonComponent implements Component{
private final Component c;
private Object val;
public Class getType(){
return c.getType();
}
public synchronized Object create(Dependency dep){
...
- 02:10
- 浏览 (2112)
- 评论 (0)
仍然是先用oo把轮廓划出来,我们需要建模一个接口来围绕它进行组合。
因为本文是关于co的论述,那么这个接口怎样分析出来的就暂时忽略掉了:
[code:1]interface Dependency{
Object getArgument(int i, Class type);
Class verifyArgument(int i, Class type);
Object getProperty(Object key, Class type);
Class verifyProperty(Object key, C ...
- 07:20
- 浏览 (1986)
- 评论 (1)
迄今,发现典型的几种疑问是:
1。组合子的设计要求正交,要求最基本,这是不是太难达到呢?
2。面对一些现实中更复杂的需求,组合子怎样scale up呢?
其实,这两者都指向一个答案:重构。
要设计一个完全正交,原子到不可再分的组合子,也许不是总是那么容易。但是,我们并不需要一开始就设计出来完美的组合子设计。
比如,我前面的logging例子,TimestampLogger负责给在一行的开头打印当前时间。
然后readonly提出了一个新的需要:打印调用这个logger的那个java文件的类名字和行号。
分析这个需求,可以发现,两者都要求在一行的开始打印一些东西。似乎有些共性.
这个" ...
- 08:31
- 浏览 (1272)
- 评论 (0)
不少朋友说我的阐述很苍白无力。这让我很苦恼。我确实是拚了命地想把问题说清楚,我也有实际non-trivial的项目经验,怎么就说不明白呢?哎!
所以,还是不能不多罗嗦一下,希望能够再阐述得明白一点。
其实,所谓co,有心的朋友也许能够感觉到,它很象是设计一门语言。
它有顺序/分支,有函数调用,异常处理,基本上一个程序设计语言有的东西它都有了。这些顺序/分支作为语言的基础设施,而一些应对具体需求的原子操作,(比如WriterLogger,比如NeptuneExceptionLogger)则可以看作是语言的扩展或者库。
只不过,c/c++/java是有编译器来把源代码转化成目标代码。而co ...
- 12:39
- 浏览 (1149)
- 评论 (0)
每个小孩刚开始走路的时候都是跌跌撞撞的。
我们不自量力,妄图踩着上帝的步伐前进。结果就是这么几个简单的象白开水似的类。失望吗?是不是造物试图模仿造物主本身就是一种可笑的狂妄呢?
别急,让我们失声痛哭之前先看看我们这几步走的是不是一钱不值。
[list]
1。logger可以把信息打印到log文件中。
容易,直接创建一个WriterLogger就好了。
2。不同的重要程度的信息也许可以打印到不同的文件中?象websphere,有error.log, info.log等。
如果这样,那么什么重要程度的信息进入error.log,什么进入warning.log,什么进入info.log也需要决 ...
- 07:21
- 浏览 (940)
- 评论 (0)
唧唧歪歪一大堆。肯定早有人不耐烦了。
"你丫还有没有点实在的东西呀?"
要是我,可能也早就忍不住了。
好,好。我其实并没有忘记前面说的那个logging的例子。卖了这么长时间的关子,除了有想形而上的虚荣心外,也是想给大家多一点时间来嚼一下这个例子,让熟悉OO的朋友肚子里面多少有个腹稿。
下面,我来继续上回书说到的这个logging。
前面列举了那么一大堆乱七八糟的需求,不知道是不是有人和我一样看着这些繁杂的条目闹心。我在做的时候其实只想了五六条需求,就已经开始烦了。何况还有一些暂时不知道如何抉择的几个疑问点。最初Kiss出来的那个logger实现明显不能用了。refactor的价值也有限 ...
- 03:33
- 浏览 (1077)
- 评论 (0)
失乐园发了之后。有的朋友对“OO是一种自顶向下的方法论”的论述有些疑问。
这里补充一下。
如果认可OO是一个责任分配体系,那么自顶向下就是一个自然的逻辑结论。
没有分析出来“需求”,也就无所谓“责任”,于是根本就无所谓“OO”了。
这种从分析需求,分解需求,分配责任,再分析子需求,分解子需求,在子模块内分配责任的方式,被我称为“自顶向下”。
至于说xp, tdd和自顶向下是不矛盾的。它们也都是要依赖于需求分析的。test case是什么?不就是需求么?
当然,这些方法论并不要求需求百分之百的细化,它们认可变化,拥抱变化,力求变化时的代价最小。不过,不管怎么说,它们仍然是要着眼于当 ...
- 01:30
- 浏览 (1031)
- 评论 (0)
前面我们讲到一些OO和CO的区别。肯定有人不以为然。什么CO?OO包罗万象,你所谓的CO也不过是OO的一个分支而已。
是啊,易经也包罗万象,也许太极图或者伏羲六十四卦早就可以描述蒸汽机,喷气战斗机,计算机,烤火鸡,等等,更何况什么OO,CO呢?
其实,如果把OO当作一个大箩筐,什么都往里装,自然,我这里要说的也不会跳出它的藩篱。毕竟我这CO还是用java实现的呢,归根结底,不是还要用class, interface之类的东西乱搞?
而我所谈的OO,和老庄不同,不是那么一个宽泛的概念。实际上,我说的OO包括两个阶段。
第一个阶段:
[list]1。认识到数据和行为的统一性。用类来封装数 ...
- 16:25
- 浏览 (1279)
- 评论 (0)
发现老庄的连载方法很好.又能吸引眼球又能好整以暇.于是从善如流.
这几天在完善我的neptune系统和jaskell语言。顺手发现了一个logging的需求。如获至宝阿。
为什么呢?不是因为这个需求多么难,或者我的解决方法多么巧妙,而是因为,这个例子足够简单,直观,要说明它,背景知识几乎不大需要,三两句话大家就明白需要达到什么效果。这种例子可不是随便就想得到的。
而同时,它又对实现提出了一定程度的灵活性要求,正好方便我展示我叫做“面向组合子”的程序设计方法。
说到这里,不禁又有点沮丧,我也挺想象别人那样,先高举高打,玄之又玄,弄些哲学思辨,什么佛法呀,道德经阿,西游记亚,以及各位西 ...
- 16:10
- 浏览 (1915)
- 评论 (0)
- 浏览: 182188 次

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
SQL 小技巧
第三个问题,先写出代码来吧。等有点时间再解释一下。第四个问题其实可以照猫画虎的: ...
-- by ajoo -
SQL 小技巧
第一个问题是我在维护一个金融分析软件的时候碰到的。原来的那位老兄正儿八经地用一个 ...
-- by ajoo -
SQL 小技巧
效率没问题。实际上一般的query效率都在查询上,至于对查询结果的计算,代价基本 ...
-- by ajoo -
Not Convinced about Java ...
最讨厌所谓的魔法了,调试的时候能让人吐血。
-- by aninfeel -
SQL 小技巧
ajoo 写道Readonly 写道问题一,经过google得到一用sum,lo ...
-- by Readonly






评论排行榜