romza在BJUG的maillist里提出了一个问题,Web开发中的Component,能不能够通过OSGi这样的插件体系,来进行组织,以提高代码的可重用性。
这个帖子引起了广泛而深入的讨论,我也在很后面加入了进去,说了一点。
飞驰的话题呼啸而过,我稍一迟疑,就赶不上趟了。
但是这里面的话题,又的确是我非常感兴趣的(嗯,跑题了那么远,但是还在我的兴趣范围内),所以的确是应该出来聊聊我的看法,特别是徐Rx同志多次提到了我的DJ...
1、徐Rx,我认为你不应该为自己的表达能力过多辩护,还把责任推到我们中华民族伟大的中文上来。看着你的帖子,我好几次都差点晕过去,百分之50中文单词勾兑百分之50的英文单词。这样的句子,能让人读懂吗?
2、几次昏过去之后,我又强迫自己醒过来接着看帖子,我认为徐Rx还是讲得很正确的,除了再次想把我的DJ和语义网拉上关系之外。
3、回到最初的话题,romza的需求可以理解,但是你所猜测的那个解决方案(插件体系结构)我认为不是一条正路。提高软件的重用性,自然是大家多年来一直追求的目标,但是不同的应用领域,应该有不同的重用规范。彼此之间可以参考,但是很难照搬。就我对Web开发的理解,在AJAX还没有大规模改变Web开发的世界之前,浏览器的运作模式是非常单调的(请求-响应)模式,响应的输出,无非就是文本,在这样的世界里,Web模板是最自然的解决方案。比如buaawhl的Fastm,或者我的Fastm+。但是当AJAX的概念大面积的进入人们的视线之后,传统的思维就必须修正了,由此而引发的一系列的思考,我倒现在也没有完全想好,也许Micheal
Chen可以出来谈谈。但是,现有类似于AjaxTags这样的用Tags给Web1.0打补丁的方式,我认为是丑陋的。
4、再说面向对象与面向方面的问题,在只有Object的世界里,对象就是唯一的可以重用的积木。这个积木从其本质来说,就是有缺陷的,所以要想在OO的基础上重用,就会很辛苦(参见我的《丧钟》系列)。但是贸然引入Aspect,也并非解救之道。就像AJAX出现之后,我们必须重新思考Web开发,而不是打补丁一样。Aspect的概念出现之后,我们现在的用法,也不过是用Aspect给Object打补丁。这样的做法,在我看来,一样是丑陋的。
5、AOSD我看了一下,那老头举的例子,简直就是在说梦话。要像他那样做面向方面的分析设计,系统肯定是做不出来的。
6、说说我的DJ,在我看来,强行将一些行为划入Object,而另一些划入Aspect,是不平等的。这些行为不该有这样的高低贵贱之分。在DJ之中,他们都是某一个Channel。语义是:"Channel就是行为插入数据的管子"。每一个管子之间是平等的,而我们需要一个更加强壮的机制,来管理这些行为之间的相互干扰,以及对于数据的交叉读写。
7、前面拐拐龙底咚说的:"一下子想起了久违的DB触发器",实在是深得我心。我一直认为,在确保数据安全方面,OO的做法是愚蠢的,而DB的触发器是一种更加灵活的方案。但是传统数据库中的触发器,缺少对行为相互干扰之间的管理,而是纯粹只关心了数据的安全。因此,我一直在设想,如果我的DJ能够成为某种PL/SQL的直接扩展,也许是更加自然的一种实现方案。
8、徐Rx的C/C++回忆我也很赞同,我曾经跟一个朋友说过一句话:"框架就是弱语言,而语言就是强框架"。我现在所在的公司,做的那个乐酷网络电视录像机,背后的业务逻辑支撑框架,就是按我的DJ的思路来做的,叫做DOOP。面向动态对象的编程。应该这么说,是先有了DOOP的开发实践,才有了后来更进一步语言化的打算。
9、我对于DJ的定位,是一种业务逻辑层的描述语言,而其它的方面,它肯定都不擅长,比如界面层,比如网络层。因此,我的看法是,在现在的多层架构的体系下,抛开"确切所处的层次来谈重用",肯定是用不好的。也可以这么说,你不可能找到一个方案,能够一举解决整个系统的重用性问题。必须区分技术领域、区分系统层次,区分不同的规模尺度。然后才能来谈重用。这样才可能成功的。
posted on 2005-11-28 22:45
读书、思考、生活 阅读(1121)
评论(2) 编辑 收藏