论坛首页 编程语言技术论坛

AIR, 我已经对你彻底失望了.

浏览 49038 次
该帖已经被评为精华帖
作者 正文
   发表时间:2010-04-13  
ltian 写道
fins 写道
flasheep 写道
一种技术而已 开发者的目的是完成客户的需求 手段不重要 也没有什么完美的和一劳永逸的东西 发这样的文章好奇怪


你这种抽象 宏观 毫无破绽的论调 跟谁学的? 学点有用的好不好? 假大空的套话少说点 多去学学技术.


向楼主这样关心具体技术是值得学习的,但是抽象宏观也是一种能力,我觉得生命力持久的技术真的还在于抽象和宏观的东西,他们和具体语言及开发工具IDE关系不大:诸如:
1.企业核心语义模型(ESM)。
2.面向对象的设计模式。
3.有关权限,工作流,消息,任务,排程,定价、图形组态等公共的技术平台类模型。

我们中国当前在计算机方面专研微观领域的人很多,学语言学的很精的人也很多,但是我们在抽象模型方面研究的太少了,同样是一个新的语言或开发工具出来之后,没多久,老外的公司就会拿出一套非常强的产品。比如Flex/Flash的仪表盘组件(ILOG公司开发的东西),还有像做EMS、ERP或者其他领域的一些产品。而我们却迟迟不能拿出自己的东西,并不是我们对语言工具不熟,而是我们对该领域模型不熟悉,所以我们拿不出什么核心产品。我们精通C语言,C++语言的人很多,又多少人熟悉编译原理和编译器的模型呢?有多少人熟悉数据库操作系统模型呢?我们不掌握核心的模型和方法论,这才是中国技术落后的根本原因。如果把抽象宏观的东西当成了毫无用处的东西,那么我觉得是很危险的,我们需要一流的程序员,也需宏观抽象能力很强的架构师,二者之间没有高下之分。
   话又说回来,关于Flex,我认为它只是一套SDK及其开发IDE,它不可能圆满地解决所有领域的东西,就Flex组件库本身来说,如果做图形化的工作,直接从Flex SDK下继承确实效率较低,开发者可以从Flash 的SDK下继承开发。但是针对数据输入展示的控件,比如dataGrid,下拉列表框,tree等的效率还是不错的,至少客户是能够忍受的。我们的团队从2007年9月开始使用Flex开发电力企业应用,在这个领域,Flex组件的体积、运行效率等问题并不突出,据使用过Flex和ExtJs提取大量数据在表格中展示的同事们报告说,Flex的执行效率远高于ExtJs的。所以本人认为在企业开发领域,Flex的优点是显著的,在图形化和BI领域,使用Flash的类库也会使得问题得以解决,因此完美的技术解决方案几乎是不存在的。我个人在企业应用开发领域是推崇Flex,确实它能带来极高的开发效率和良好的用户交互体验,目前还没有更成熟的产品能超过Flex。
   当然,Flex仅仅是展现层的一种开发技术,对我个人而言,我认为企业核心语义模型、应用系统架构的分层,系统、应用、模块、组件及服务之间的模型和关系更为重要。如果这些底层的东西做的好的话,换一个展现层的东西是不会伤筋动骨的。   一家之言,仅供参考。



看来不管我怎么努力 话题还是不可避免的被引到 flex上.
其实 flex在现阶段唯一可取的就是 在处理大数据量时带来的性能优势了.
而flex在开发时所表现出来的优点我觉得也无外乎以下几条:
1 有好的开发工具
2 as3 可以是强类型的 可以在开发期纠错
3 基于标签的UI编码方式 (这个说它是优点 主要是让熟悉html 和 jsptag的开发人员用起来更习惯)

而一但需求稍微复杂一点 扩展flex的控件 就是一件很头疼的事情.
大量的as避免不了.

当然 我说的这个缺点主要还是集中在 "Flex自带的组件不够多 组件的接口和事件不够丰富 扩展不够方便"
是的 最大的不足就在这里

组件化程度不高 我反复的强调过很多次这个问题. 而企业级开发中 这个问题是很重要的.

直接牵涉到快速开发 后期维护 系统一致性 等很多问题.

记得以前有个 第三方的flex扩展组件库 可惜后来死掉了
如果它能够很好的发展 作为flex一个有效的补充 也许flex的情况就会好很多.


关于flex组件化程度 你可以拿flex和extjs中 同样的组件做个对比 看看extjs的组件所提供的接口 事件 用户体验以及扩展方式.
对比一下就知道了 flex作为一个世界级大公司的 重要产品 它应该感到羞愧的.
0 请登录后投票
   发表时间:2010-04-13   最后修改:2010-04-13
fins 写道
ltian 写道
fins 写道
flasheep 写道
一种技术而已 开发者的目的是完成客户的需求 手段不重要 也没有什么完美的和一劳永逸的东西 发这样的文章好奇怪


你这种抽象 宏观 毫无破绽的论调 跟谁学的? 学点有用的好不好? 假大空的套话少说点 多去学学技术.


向楼主这样关心具体技术是值得学习的,但是抽象宏观也是一种能力,我觉得生命力持久的技术真的还在于抽象和宏观的东西,他们和具体语言及开发工具IDE关系不大:诸如:
1.企业核心语义模型(ESM)。
2.面向对象的设计模式。
3.有关权限,工作流,消息,任务,排程,定价、图形组态等公共的技术平台类模型。

我们中国当前在计算机方面专研微观领域的人很多,学语言学的很精的人也很多,但是我们在抽象模型方面研究的太少了,同样是一个新的语言或开发工具出来之后,没多久,老外的公司就会拿出一套非常强的产品。比如Flex/Flash的仪表盘组件(ILOG公司开发的东西),还有像做EMS、ERP或者其他领域的一些产品。而我们却迟迟不能拿出自己的东西,并不是我们对语言工具不熟,而是我们对该领域模型不熟悉,所以我们拿不出什么核心产品。我们精通C语言,C++语言的人很多,又多少人熟悉编译原理和编译器的模型呢?有多少人熟悉数据库操作系统模型呢?我们不掌握核心的模型和方法论,这才是中国技术落后的根本原因。如果把抽象宏观的东西当成了毫无用处的东西,那么我觉得是很危险的,我们需要一流的程序员,也需宏观抽象能力很强的架构师,二者之间没有高下之分。
   话又说回来,关于Flex,我认为它只是一套SDK及其开发IDE,它不可能圆满地解决所有领域的东西,就Flex组件库本身来说,如果做图形化的工作,直接从Flex SDK下继承确实效率较低,开发者可以从Flash 的SDK下继承开发。但是针对数据输入展示的控件,比如dataGrid,下拉列表框,tree等的效率还是不错的,至少客户是能够忍受的。我们的团队从2007年9月开始使用Flex开发电力企业应用,在这个领域,Flex组件的体积、运行效率等问题并不突出,据使用过Flex和ExtJs提取大量数据在表格中展示的同事们报告说,Flex的执行效率远高于ExtJs的。所以本人认为在企业开发领域,Flex的优点是显著的,在图形化和BI领域,使用Flash的类库也会使得问题得以解决,因此完美的技术解决方案几乎是不存在的。我个人在企业应用开发领域是推崇Flex,确实它能带来极高的开发效率和良好的用户交互体验,目前还没有更成熟的产品能超过Flex。
   当然,Flex仅仅是展现层的一种开发技术,对我个人而言,我认为企业核心语义模型、应用系统架构的分层,系统、应用、模块、组件及服务之间的模型和关系更为重要。如果这些底层的东西做的好的话,换一个展现层的东西是不会伤筋动骨的。   一家之言,仅供参考。



看来不管我怎么努力 话题还是不可避免的被引到 flex上.
其实 flex在现阶段唯一可取的就是 在处理大数据量时带来的性能优势了.
而flex在开发时所表现出来的优点我觉得也无外乎以下几条:
1 有好的开发工具
2 as3 可以是强类型的 可以在开发期纠错
3 基于标签的UI编码方式 (这个说它是优点 主要是让熟悉html 和 jsptag的开发人员用起来更习惯)

而一但需求稍微复杂一点 扩展flex的控件 就是一件很头疼的事情.
大量的as避免不了.

当然 我说的这个缺点主要还是集中在 "Flex自带的组件不够多 组件的接口和事件不够丰富 扩展不够方便"
是的 最大的不足就在这里

组件化程度不高 我反复的强调过很多次这个问题. 而企业级开发中 这个问题是很重要的.

直接牵涉到快速开发 后期维护 系统一致性 等很多问题.

记得以前有个 第三方的flex扩展组件库 可惜后来死掉了
如果它能够很好的发展 作为flex一个有效的补充 也许flex的情况就会好很多.


关于flex组件化程度 你可以拿flex和extjs中 同样的组件做个对比 看看extjs的组件所提供的接口 事件 用户体验以及扩展方式.
对比一下就知道了 flex作为一个世界级大公司的 重要产品 它应该感到羞愧的.


关于Flex组件化我是看了其组件化源码的,对其生命周期是很了解,我不了解ExtJs的组件模型,所以我不敢说二者谁强谁弱,但是我以前用Delphi开发过组件,很明显组件化开发要比Dlephi强很多,简单很多。如果您对FLex组件生命周期也很了解的话,我相信你说的是客观的。对于ExtJS到底谁更适合企业应用的UI层开发,希望更多人进行讨论,有人用过Flex吃过亏,也有人用ExtJs吃过亏,大家多讨论,多PK,问题才能阐述清楚,感谢楼主提供了一个可以引起大家兴趣的帖子。
0 请登录后投票
   发表时间:2010-04-13  
Flex 中的list,dataGrid,下拉列表框,tree 是比较常用的了,在呈现大量数据的时候,的确有一定性能上的优势,因为它的renderer是复用的。如果仅仅是简单的数据呈现,也没什么问题。但是实际应用中,renderer都是比较个性化的,当你精心构造好了一个renderer交给list呈现的时候,性能的问题就来了,创建要白屏一会,滚动的时候开始变卡。不要告诉我你应该优化你的renderder让它变的尽量简单,事实是flex组件创建速度太慢,应该优化的是flex组件。后来还是自己实现了,性能和功能还算比较理想。Flex组件性能的提升空间还是很大的,不过其生命周期过于复杂,整个就是奔着一重量级方向去的,期待其轻量化,也是不太可能了。

个人感觉Flex组件在应对一些个性化界面方面有些心不从心,如果去扩展现有组件,性能上绕不过去,整个框架限制的比较死,可扩展的余地也不是很大。

列举一下Flex使用中感觉不顺的地方,可能有些地方已经有比较好的解决办法了,罗列一下,仅供参考。

1 mxml编译速度过慢,在同时编写多个模块的时,等待编译的时间比较折磨人。
2 css 选择器实在太弱,给开发增加了不必要的代码量,此情况在Flex4中已有所改善
3 tree组件没有横向滚动条,是有意为之,还是有待完善
4 dataGrid横向滚动会卡
5 label组件的文本截取算法效率太低,整个把文本全扫描了一遍,应该换为更好一点的二分查找算法
6 tooltip的消失延迟时间是全局的,不能单独定制
7 richeditor整个就是封装死的,你想扩展都无从下手,当然可以通过一些hack手段可以做到
8 基于list的组件如dataGrid,tree等在可变行高情况下,滚动条的算位不准
9 UICompoent的生命周期过于复杂,导致组件创建速度偏慢,创建50个checkbox,就能开始感到短暂的白屏,后来学乖了,在有大量界面组件的时候,不敢再用Flex组件的,改用flash的simplebutton,性能提升显著。
10 renderder不能写的太复杂,会有性问题,严重限制了创意的表达,后来改为自己实现组件
11 一些需要文本呈现的地方,如list,datagrid,tree,tooltip如果能直接支持html格式会更实用一些,虽然做一些扩展也能做到
12 对html格式支持的比较弱,在做html呈现的时候,不太理想。
13 repeater组件超难用

6 请登录后投票
   发表时间:2010-04-13  
vii779 写道
Flex 中的list,dataGrid,下拉列表框,tree 是比较常用的了,在呈现大量数据的时候,的确有一定性能上的优势,因为它的renderer是复用的。如果仅仅是简单的数据呈现,也没什么问题。但是实际应用中,renderer都是比较个性化的,当你精心构造好了一个renderer交给list呈现的时候,性能的问题就来了,创建要白屏一会,滚动的时候开始变卡。不要告诉我你应该优化你的renderder让它变的尽量简单,事实是flex组件创建速度太慢,应该优化的是flex组件。后来还是自己实现了,性能和功能还算比较理想。Flex组件性能的提升空间还是很大的,不过其生命周期过于复杂,整个就是奔着一重量级方向去的,期待其轻量化,也是不太可能了。

个人感觉Flex组件在应对一些个性化界面方面有些心不从心,如果去扩展现有组件,性能上绕不过去,整个框架限制的比较死,可扩展的余地也不是很大。

列举一下Flex使用中感觉不顺的地方,可能有些地方已经有比较好的解决办法了,罗列一下,仅供参考。

1 mxml编译速度过慢,在同时编写多个模块的时,等待编译的时间比较折磨人。
2 css 选择器实在太弱,给开发增加了不必要的代码量,此情况在Flex4中已有所改善
3 tree组件没有横向滚动条,是有意为之,还是有待完善
4 dataGrid横向滚动会卡
5 label组件的文本截取算法效率太低,整个把文本全扫描了一遍,应该换为更好一点的二分查找算法
6 tooltip的消失延迟时间是全局的,不能单独定制
7 richeditor整个就是封装死的,你想扩展都无从下手,当然可以通过一些hack手段可以做到
8 基于list的组件如dataGrid,tree等在可变行高情况下,滚动条的算位不准
9 UICompoent的生命周期过于复杂,导致组件创建速度偏慢,创建50个checkbox,就能开始感到短暂的白屏,后来学乖了,在有大量界面组件的时候,不敢再用Flex组件的,改用flash的simplebutton,性能提升显著。
10 renderder不能写的太复杂,会有性问题,严重限制了创意的表达,后来改为自己实现组件
11 一些需要文本呈现的地方,如list,datagrid,tree,tooltip如果能直接支持html格式会更实用一些,虽然做一些扩展也能做到
12 对html格式支持的比较弱,在做html呈现的时候,不太理想。
13 repeater组件超难用


FLex组件生命周期理解透彻了可能某些问题会得以解决。如果在组件代码中使用setStyle方法,会导致性能奇慢。
0 请登录后投票
   发表时间:2010-04-13   最后修改:2010-04-13
做一些不是很个性化的数据展现类型的企业应用,flex开发比较快,也比较方便.
涉及到一些个性化以及类似图文展现的应用,就只能自行写as来开发组件,或者用一些hack的方式来处理.
UIComponent确实感觉冗余了点,动不动一个类就上万行的代码,让人吐血.
至少从代码模型上和ExtJs还差很多,Ext也有Ext的问题...
0 请登录后投票
   发表时间:2010-04-13   最后修改:2010-04-13
关于setStyle的问题,都建议尽量不要调用,会导致性能低下。

假设我写了一个renderer,里面有一个lable组件,我希望根据数值的大小显示不同的颜色,比如大于100显示红色,小于100显示蓝色,很自然的我会这么写
<mx:Label text="{data}" color="{data>100?0xff0000:0x0000ff}"/>

很遗憾这样是行不通的,首先样式是不支持值绑定的。好吧,hack一把让样式支持值绑定,然后你又会被告知setStyle会带来低下的性能问题。

我想这是一个再普通不过的需求了,解决这个问题会有好几种办法,要么写复杂的AS3代码,要么再冗余一个Label,但是不论哪一种都不如上面来的直接简单和自然。如果setStyle没有性能问题,如果样式支持值绑定,整个世界就变的清净了。话说回来了,这个世界又那会有十全十美的东西,要么您就期待Flex一点一点慢慢改进吧,要么您就去封装自己的组件库吧。

顺便一提,Flex默认的几个Renderder都是用As3写的,创建和布局逻辑代码不少,如果你想继承一下扩展一把,那是不行地,里面几个关键的变量和方法都是私有的。期望Flex以后在设计API的时候,能够抱着更加开放的态度,以利于大家扩展,才有可能形成一个成熟的组件库市场的氛围。



0 请登录后投票
   发表时间:2010-04-13  
Flex的SDK封装得的确让人很恼火,官方的SDK就像大家说的“从性能、体积、灵活性和可扩展性这几方面都不理想”,想自己在Flex中实现一个可拖拽的组件,还没写逻辑,一继承UIComponent就是一两百k,让人郁闷。只希望adobe在Flash Builder上多下点功夫,真正让Flash Builder可以用起来。
0 请登录后投票
   发表时间:2010-04-13  
vii779 写道
关于setStyle的问题,都建议尽量不要调用,会导致性能低下。

假设我写了一个renderer,里面有一个lable组件,我希望根据数值的大小显示不同的颜色,比如大于100显示红色,小于100显示蓝色,很自然的我会这么写
<mx:Label text="{data}" color="{data>100?0xff0000:0x0000ff}"/>

很遗憾这样是行不通的,首先样式是不支持值绑定的。好吧,hack一把让样式支持值绑定,然后你又会被告知setStyle会带来低下的性能问题。

我想这是一个再普通不过的需求了,解决这个问题会有好几种办法,要么写复杂的AS3代码,要么再冗余一个Label,但是不论哪一种都不如上面来的直接简单和自然。如果setStyle没有性能问题,如果样式支持值绑定,整个世界就变的清净了。话说回来了,这个世界又那会有十全十美的东西,要么您就期待Flex一点一点慢慢改进吧,要么您就去封装自己的组件库吧。

顺便一提,Flex默认的几个Renderder都是用As3写的,创建和布局逻辑代码不少,如果你想继承一下扩展一把,那是不行地,里面几个关键的变量和方法都是私有的。期望Flex以后在设计API的时候,能够抱着更加开放的态度,以利于大家扩展,才有可能形成一个成熟的组件库市场的氛围。




原来您是这样理解Flex组件开发的,难怪!
0 请登录后投票
   发表时间:2010-04-14   最后修改:2010-04-14
ltian 写道
vii779 写道
关于setStyle的问题,都建议尽量不要调用,会导致性能低下。

假设我写了一个renderer,里面有一个lable组件,我希望根据数值的大小显示不同的颜色,比如大于100显示红色,小于100显示蓝色,很自然的我会这么写
<mx:Label text="{data}" color="{data>100?0xff0000:0x0000ff}"/>

很遗憾这样是行不通的,首先样式是不支持值绑定的。好吧,hack一把让样式支持值绑定,然后你又会被告知setStyle会带来低下的性能问题。

我想这是一个再普通不过的需求了,解决这个问题会有好几种办法,要么写复杂的AS3代码,要么再冗余一个Label,但是不论哪一种都不如上面来的直接简单和自然。如果setStyle没有性能问题,如果样式支持值绑定,整个世界就变的清净了。话说回来了,这个世界又那会有十全十美的东西,要么您就期待Flex一点一点慢慢改进吧,要么您就去封装自己的组件库吧。

顺便一提,Flex默认的几个Renderder都是用As3写的,创建和布局逻辑代码不少,如果你想继承一下扩展一把,那是不行地,里面几个关键的变量和方法都是私有的。期望Flex以后在设计API的时候,能够抱着更加开放的态度,以利于大家扩展,才有可能形成一个成熟的组件库市场的氛围。




原来您是这样理解Flex组件开发的,难怪!



vii779这么理解有什么不妥吗? 你是怎么看的?


BTW :
vii779 ltian znjq  等几位朋友的跟帖讨论 要比主贴更精彩
建议关注flex 开发的同学看一下.
(虽然我主贴是关于 AIR的 但是我不介意在这里讨论 flex的问题 呵呵
因为关于flex 其实我也有很多话想说)

我关于AIR的具体的分析贴 打算在AIR 2.0正式推出 并且我使用过之后再写.
但是不管怎样 如后面一位朋友所言 我对AIR更多的是一种恨铁不成钢的感觉 而没有绝对的恶意.


0 请登录后投票
   发表时间:2010-04-14  
ltian 写道
vii779 写道
关于setStyle的问题,都建议尽量不要调用,会导致性能低下。

假设我写了一个renderer,里面有一个lable组件,我希望根据数值的大小显示不同的颜色,比如大于100显示红色,小于100显示蓝色,很自然的我会这么写
<mx:Label text="{data}" color="{data>100?0xff0000:0x0000ff}"/>

很遗憾这样是行不通的,首先样式是不支持值绑定的。好吧,hack一把让样式支持值绑定,然后你又会被告知setStyle会带来低下的性能问题。

我想这是一个再普通不过的需求了,解决这个问题会有好几种办法,要么写复杂的AS3代码,要么再冗余一个Label,但是不论哪一种都不如上面来的直接简单和自然。如果setStyle没有性能问题,如果样式支持值绑定,整个世界就变的清净了。话说回来了,这个世界又那会有十全十美的东西,要么您就期待Flex一点一点慢慢改进吧,要么您就去封装自己的组件库吧。

顺便一提,Flex默认的几个Renderder都是用As3写的,创建和布局逻辑代码不少,如果你想继承一下扩展一把,那是不行地,里面几个关键的变量和方法都是私有的。期望Flex以后在设计API的时候,能够抱着更加开放的态度,以利于大家扩展,才有可能形成一个成熟的组件库市场的氛围。




原来您是这样理解Flex组件开发的,难怪!


不妥之处欢迎指正,期待您的高见。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics