> Python上是否有类似的成熟体系?
>
> 有的,twisted在用,zope在用,还有很多知名的python软件都在用....
>
> 那就是著名的Zope Component Architecture,来自于Zope社区的一个系统,却已经在整个python社区开花结果
> 了。。。。
>
> 发展了若干年的宝物在这里:
>
> http://www.muthukadan.net/docs/zca.html
>
> (绝对不是新鲜玩意了,如果您还不知道,责任不在您,只怪zope社区广告没做好)
>
> 即便你做非web的程序,这个也是试用你的,上的例子就是基于pyGTK的。
>
> 很简单的概念(适配器、工具),却容下了各种设计模式的纷繁内容,秉承了python"大道至简"的理念。
>
> 如果你只想作python脚本级别的开发,这个您可能不那么需要ZCA;
>
> 如果您是真正的pythoner开发人员,ZCA绝对是不得不学的附加,我超强力推荐!
>
> 广告到此结束。
>
> (如果有人想翻译上面的文章,和俺联系)
俺先报名了!
建议到 OBP 工程环境来统一组织...
--
http://zoomquiet.org'''
过程改进乃是催生可促生靠谱的人的组织!
PE keeps evolving organizations which promoting people be good!'''
在 08-8-27,潘俊勇<panju...@gmail.com> 写道:
在 08-8-27,潘俊勇<panju...@gmail.com> 写道:
在 08-8-27,风翔万里<cnfa...@gmail.com> 写道:
大抽象的东西,理解再通,具体到代码来时,一样冇头绪的哪!
马上 OpenSourceCamp 要举行了 EveryDo 团队,就SaaS,Zope3 ZCA 可以提出好些议题的!
建议进行准备先,
俺只有Pythonic 教育/过程改进方面的体验可以分享,,,
>
> 2008/8/27 vicalloy <zbi...@gmail.com>
>>
>> 风翔万里给我的感觉,每次说话都很牛X。
>> 这是社区,大家在这里交流/消遣,但没人有责任来教你啥。
>> 老大只是给出一个参考,给出一个线索,具体怎么样还需要自己把握。
>>
>> 在 08-8-27,风翔万里<cnfa...@gmail.com> 写道:
>> > 别故弄玄虚的,告诉我们他能为客户带来什么价值?能提高多少开发效率,好让我们不用加班?在不添加硬件的情况下提高多少程序性能,能让我们降低多少实施
>> > 成本,提高多少方案利润?
--
上面只让我看到了接口的标准化,在python中虽然没有强调interface,但是duck
type还是用的,比如file-like对象,只要有write,
read之类的就可以使用。只不过不象interface这样比较明确罢了。但如果只是因为interface把原本不明确的使用转为明确的定义,我认为只是定义上的严格,并不是太革命性的东西。
而且interface与baseclass也有类似的地方,我把interface改为某个基类效果差不多,就象c++中的抽象类一样。虽然定义不同,但是在某些方面可以做得差不多。
--
I like python!
UliPad <<The Python Editor>>: http://code.google.com/p/ulipad/
UliWeb <<simple web framework>>: http://uliwebproject.appspot.com
My Blog: (new)http://http://hi.baidu.com/limodou
(old)http://www.donews.net/limodou
> 4、zope上面是不是只能跑python的应用,php\jsp都不行?
zope 是一个应用服务器,上面跑python。 难道tomcat,jboss 上也要跑 php么?
php和jsp那些可以通过前面加apache来与zope协同。另外,好像zope中确实有方法调用php的。
>
>
刚到您的blog转了一圈,问点基础问题:
1、是不是用了zope后可以替代tomcat和apache这些web服务器了,python_mod是不是也不需要了?如果我有应用已经用了
python_mod是不是要去掉后才能移植?
2、zope的web服务是用什么语言实现的?
3、上文提到的Component是不是主要针对zope平台上的组件开发的?
4、zope上面是不是只能跑python的应用,php\jsp都不行?
收录:
http://wiki.woodpecker.org.cn/moin/ZopeComponentArchitecture
readPath: 首页->PyWebFrameList(WEB应用框架纵览)->
--
俺的理解,这是将软件开发 乐高枳木化的又一种思想,
可素,真的可行?
别的不说, ZCA 的组件仓库有 CPAN 的级别嘛?
--
2008/8/27 @@ <ask...@gmail.com>:
> eclipse的RCP是不是有这套东西。 adapter注册什么的
>
大哥,这是举例, ZCA 绝对不只作登录的,
如果你的应用要面对,不同的DB/网络/硬件/服务/外部应用,,,,
而且都不知道什么时候哪儿块有变化,
基于组件的开发就有谱的多,
俺的理解,这是将软件开发 乐高枳木化的又一种思想,
可素,真的可行?
别的不说, ZCA 的组件仓库有 CPAN 的级别嘛?
这些东西都很抽象,有没有用zca解决的非zope开发的实例?
看得上不上眼那是个人理解的问题,至少因为不懂zca,仅从一些描述还无法体会。
interface好还是subclass好,这个东西我不好评判。我只知道java为什么有interface,因为它不支持多重继承。而c++支持多重继承,它不需要interface。但我认为关键是语言本身是否支持。
interface与class有多大的差异?
如果差别不大的话,新意在哪里?
我把例子简单地看了一下,体会如下:
文章上举的例子(desk)是通过ZCA来处理不同的数据源,如zodb和sqlite3,因此它通过zca作了一个封装。在程序启动时根据命令行(check_use_relational_db())不同来调用不同的初始化处理
if use_rdb:
initialize_rdb()
else:
initialize_odb()
不同的初始化将进行相应的组件的注册。然后在程序中通过象getUtility(IRelationalDatabase)之类的调用得到当时注册的对象进行处理。
而zca提供的重要的功能:
interface等类定义
注册机制
获取机制
配置机制
因此只有当你程序有些组件需要考虑作成可替换,并且可配置时,使用zca是一个选择。
因此我个人的理解:
zca的注册,获取,配置的功能远大于interface。interface改为class也差不多,只不过interface可能有象java一样的检查功能,这一点可能要优于简单的class。但对于小项目是否这么做就不一定了。我之所以不喜欢java主要的一点就是规矩太多,而interface这个东西让我看到了java再现。可能对于大型的团队开发的意义要大于为了爱好而编程的小团体。
ulipad的mixin机制与zca还是不同。使用zca,你是在程序只对其进行使用,并不是对当前的类进行扩展。而ulipad的mixin是可以对某个类的属性,方法进行扩展。而ulipad中的plugin工作方式与zca差不多。整个ulipad也有类似zca的注册,获取,配置的机制。不过我还不清楚zca中的plugin机制(类似这个的机制)是如果工作的,比如在ulipad中,你在某个类中定义了一个plugin调用,然后根据调用的不同api对plugin的处理有所区别:
callplugin表示按顺序调用,直到处理到最后一个,无返回值
execplugin表示按顺序调用,但如果中间有函数返回非None时立即退出,并返回这个值
同时一个plugin调用点可以对应多个plugin的处理函数,是一对多的关系。这一点我在zca的例子中没有看得太清楚。
所以ulipad中的mixin技术不主要是为了组件的配置,更多的是为了功能的扩展,是合并,对处理,对类的扩展。如果说在ulipad中应用zca的话,要考虑:
如何使用zca对类进行扩展
如何处理callplugin和execplugin这两种机制
--
--
interface并不负责初始化,这是用户要做的事,并不会减少。使用子类也是一样的。而是否是耦合要看你如何使用interface。我看例子中更多的是如何获取一个utility,然后使用它,因此它并不是继承的关系。而直接使用类也是一样的。在我看来interface只关心调用的接口,并不关系调用者如何。从这个意义上来说,使用类也一样。因此只是从interface角度来说,我看区别不大。
>
>> 因此我个人的理解:
>>
>> zca的注册,获取,配置的功能远大于interface。interface改为class也差不多,只不过interface可能有象java一样的检查功能,这一点可能要优于简单的class。但对于小项目是否这么做就不一定了。我之所以不喜欢java主要的一点就是规矩太多,而interface这个东西让我看到了java再现。可能对于大型的团队开发的意义要大于为了爱好而编程的小团体。
>>
>
> zope的interface不严格的,不需要和实现完全一致。偷懒的话,实际上你只需要写类名就可以了。
> 这个和java不同。
如果只写一个类名,与类更是没有区别了。更是失去了interface的意义了。
>
>> ulipad的mixin机制与zca还是不同。使用zca,你是在程序只对其进行使用,并不是对当前的类进行扩展。而ulipad的mixin是可以对某个类的属性,方法进行扩展。而ulipad中的plugin工作方式与zca差不多。整个ulipad也有类似zca的注册,获取,配置的机制。不过我还不清楚zca中的plugin机制(类似这个的机制)是如果工作的,比如在ulipad中,你在某个类中定义了一个plugin调用,然后根据调用的不同api对plugin的处理有所区别:
>>
>> callplugin表示按顺序调用,直到处理到最后一个,无返回值
>> execplugin表示按顺序调用,但如果中间有函数返回非None时立即退出,并返回这个值
>>
>> 同时一个plugin调用点可以对应多个plugin的处理函数,是一对多的关系。这一点我在zca的例子中没有看得太清楚。
>>
>> 所以ulipad中的mixin技术不主要是为了组件的配置,更多的是为了功能的扩展,是合并,对处理,对类的扩展。如果说在ulipad中应用zca的话,要考虑:
>>
>> 如何使用zca对类进行扩展
>> 如何处理callplugin和execplugin这两种机制
>>
>
> 对unipad不熟悉,但是适配的概念,可以让程序依赖扁平话,会很少出现多层的基层,耦合降低,程序更清晰,测试起来也更方便的。
>
适配在ulipad中使用得并不多,更多的是功能的融合,所以象我所说的功能,如果zca无法实现就不适合在ulipad中使用。
> 其实熟悉设计模式的人会喜欢ZCA的。
正好我是一个不讲究设计模式的人。
>
> 看看Zope2就知道不用ZCA的问题。无数个父类,子类的功能无限膨胀,出现问题都不知道是哪里的了。
做框架与做应用程序还是有差异的,是否使用zca要看你的程序中是否需要适配这种处理。使用子类,父类一样可以实现适配。其核心不过是一种插件机制。zca只是其中一种实现而已。
ZCA 比 Mix-in 最大的好处就是 有JAVA的大量理论基础,
黑话,比较正统,看起来舒服些,
很多时候,俺感觉 Python 其实和 Perl 是类似的
都是
TOOWTDI
zca的机制是否是标准还尚未可知,但是远比ulipad的要复杂,更重要的是它是否能实现我在前面所提的功能,如果不能,再好的东西也并不适用啊。也并不是因为采用了zca就变得容易维护,zca本身还要花时间和精力还学呢。
正统可能更适合于大型团队开发,象我这个业余份子如果是看重这点,我当初就一直学java算了。我看重的是Simple is best.
微软有COM组件架构,使用接口来拼装应用,很牛。
对于复杂应用,组件架构大大简化了开发过程,系统更可扩展,柔性更强。
Python上是否有类似的成熟体系?
有的,twisted在用,zope在用,还有很多知名的python软件都在用....
那就是著名的Zope Component Architecture,来自于Zope社区的一个系统,却已经在整个python社区开花结果
了。。。。
发展了若干年的宝物在这里:
http://www.muthukadan.net/docs/zca.html
(绝对不是新鲜玩意了,如果您还不知道,责任不在您,只怪zope社区广告没做好)
即便你做非web的程序,这个也是试用你的,上的例子就是基于pyGTK的。
很简单的概念(适配器、工具),却容下了各种设计模式的纷繁内容,秉承了python"大道至简"的理念。
如果你只想作python脚本级别的开发,这个您可能不那么需要ZCA;
如果您是真正的pythoner开发人员,ZCA绝对是不得不学的附加,我超强力推荐!
广告到此结束。
(如果有人想翻译上面的文章,和俺联系)
ZCA不是分布式框架,它只是组件框架,是无法用来调用excel的。因此与com应该可比性不高。com是可以跨语言的,zca是不行的。