论坛首页 Java企业应用论坛

企业应用UI开发模式

浏览 23790 次
该帖已经被评为良好帖
作者 正文
   发表时间:2009-06-02  
继续凑凑热闹,谈谈对ui开发的一些看法.

从根本上来说,所有的ui都包括三部分,第一部分是如何定义和实现ui的各个元素;第二部分是如何从把这些元素组合起来形成一个统一的ui,第三部分是如何把这些定义的ui元素和ui界面在计算机屏幕上绘制出来.第一部分,第二部分属于数据结构的定义部分;第三部分是真正的算法部分,把数据结构变成用户实际可见的界面.
------------------------------------------------------------------
1.HTML
假如界面上选择的是HTML的话,那么第一部分用的就是html的定义元素,textbox,button之类,第二部分采用的就是html的定义语法,把各个基本元素组合成一个页面来展示.而第三部分则交给浏览器来处理,浏览器负责将html文件转换为一个一个图形界面.
这种ui实现的缺陷很多,html的基本元素很少,而且html还不能自己扩展.只能采用第三方javascript库来扩展.
所面临的问题包括:1.浏览器升级 2.javascript和浏览器不兼容 3.js bug 4.浏览器bug.
这里最要命的就是,有时你会遇到一些bug,明知存在,却无能为力,无法修改更正,只能祈祷下一个升级版本能够解决这个问题.(真实项目中曾经亲身经历,感觉非常无力)
所有把自己的ui构建在html上的系统,都似乎是在流沙上盖房子,稳定性很糟糕.
--------------------------------------------------------------------
2.Flex
Flex是一个比较新的技术,它的语法比较奇怪,让我不由得想到VB的语法.最近因为曾经把一个VB开发的程序迁移到Flex上,更加深了我的这一感觉.Flex就是用javascript的语法,来套用VB的语言结构.关于这一问题,以后有时间开专帖讨论.现在集中来谈Flex作为应用的ui基础是否可行.
对于Flex的话,ui部分的元素就是采用Flex里面提供的各种ui控件,你也可以根据自己的需要来对这些控件进行扩展;对于界面的表示形式,则采用Adobe自己定义的mhtml文件格式来存储原始界面定义文件,然后可以编译成为中间代码,在Flash的虚拟机上运行.第三部分是通过Adobe发布的一个ActiveX控件,或者插件来完成渲染绘制工作的.
从纯粹原理的角度来分析,Flex的方案要优于Html的方案.
>从ui组件上对比,flex的界面组件比html多很多,而且可以根据需要自己定义扩展
>从界面组装方式上对比,flex的界面定义格式要比html好很多,而且还有一个官方的ide支持,容易编写修改
>从渲染算法上对比,由于采用的文件格式是falsh文件格式,采用控件,插件方式来渲染执行,比在html里面再调用其他第三方的javascript的速度,效率,安全性上都要好很多.
但这个方案和第一个方案一样,要依赖于flash控件来运行,而不是直接和操作系统交互,采用flex作为ui基础的最大风险,就来自flex工具及运行环境本身的bug和升级的兼容性.
这里最要命的就是,有时你会遇到一些bug,明知存在,却无能为力,无法修改更正,只能祈祷下一个升级版本能够解决这个问题.(Flex刚开始用,还没有太遇到,但预计以后肯定会碰到的...)

---------------------------------------------------------------------
3.Extjs等
我对javascript的研究并不深入,extjs这些东西只看过别人做的一些例子,这里也是就事论事,理论探讨一下.
这种实现方案的难度也不谈,但仍然无法脱离系统受制于人的状况,采用extjs开发ui,受限制于:
>浏览器的支持和兼容
>extjs本身的bug
>extjs和其他javascript代码的兼容
采用这种解决方案,仍然要面对同样冷酷的事实:一旦extjs有了bug,你的整个系统都将受到影响,而你却无能为力.
---------------------------------------------------------------------

4.Swing/javaFx
这个就不深入开展了,和上面所面临的问题都是一样的.它把Browser的问题回避了,把jdk的问题取而代之.

----------------------------------------------------------------------
综上所述,上面提到的四种方案,其实都存在最为要命的缺陷,那就是把自己产品的生命,完全交代给另外一方来控制,一旦这个基础结构(Jdk/Ie/Flash)变化升级,或者有了bug,应用本身将发生无法预测的情况.

现在回过头来再看SAP,它们早就看透了这一点,所以SAP公司的产品开发,是自己从头做起,绝不会依赖于外部的产品的,这些所有外部的产品,本质上是靠不住的.那些说SAP看见java出来以后后悔的人,完全是想当然.
再多说一句,所有世界性的软件公司,他们的核心技术,开发工具和开发语言,一定是自己开发一套出来用的,就算是Java语言,Ibm用的是自己的jdk,BEA用的是自己的jdk,Oracle用的也是自己的jdk,就算SAP要用java开发,它们也一定会自己搞一个jdk出来的.为啥?底层技术,是绝对不能受制于人的.

-----------------------------------------------------------------------
话说回来,上面的方案都有问题,那怎么办?怎么样才能彻底摆脱对外部产品的依赖?
我的看法是,如果要真正解决这个问题,就必须下决心一切从头开始,自己开发一套控件库,通过直接访问操作系统的方式,来完成界面的渲染工作.这样一来,才能摆脱浏览器升级的麻烦.
具体来说,就是需要做如下的工作:
1.自己定义界面的ui元素定义
2.自己定义一套界面的定义格式(由ui元素组成)
3.(核心)自己开发一个界面的渲染器,将界面定义直接渲染成图形界面,采用Activex形式嵌入到IE浏览器执行.






1 请登录后投票
   发表时间:2009-06-02  
建议你考虑一下air或者flex吧,开发ui基本都是拖拖拉拉的模式,不用写大量复杂 的创建逻辑!!不过要定制的话,也需要自定义,但比起html来,要简单多了!!
0 请登录后投票
   发表时间:2009-06-02   最后修改:2009-06-02
liujunsong 写道
继续凑凑热闹,谈谈对ui开发的一些看法.


完全不敢苟同你的看法。

引用
底层技术,是绝对不能受制于人的


按你的说法,jdk是底层,计算机语言算不算底层,那么操作系统算不算底层,cpu算不算底层。那么所有的公司做应用的时候,是不是都应该从先开发cpu,再开发os,然后jdk?而且每个公司都有自己的一套东西,不然,就受制于人了。

引用
采用Activex形式嵌入到IE浏览器执行


这就有点不对了。既然不能受制于人,怎么又可以把你的核心建立在activeX,ie和windows上呢?你自己说的,“那就是把自己产品的生命,完全交代给另外一方来控制,一旦这个基础结构(Jdk/Ie/Flash)变化升级,或者有了bug,应用本身将发生无法预测的情况.”

你的控件库难道只支持ie浏览器?只支持windows?

引用
这个就不深入开展了,和上面所面临的问题都是一样的.它把Browser的问题回避了,把jdk的问题取而代之.


其实你所作的,和上面所面临的问题都是一样的。你把简单的问题都回避了,用更加复杂得多的问题取而代之。

能追求完全技术独立性的公司,恐怕全世界加起来也没有几家。ibm虽然有自己的jdk,但还是基于java规范。微软虽然有自己的操作系统,但还是基于其他公司的cpu。你所追求的,只能说是一个乌托邦式的理想。
1 请登录后投票
   发表时间:2009-06-02  
引用
采用Activex形式嵌入到IE浏览器执行

这就有点不对了。既然不能受制于人,怎么又可以把你的核心建立在activeX,ie和windows上呢?你自己说的,“那就是把自己产品的生命,完全交代给另外一方来控制,一旦这个基础结构(Jdk/Ie/Flash)变化升级,或者有了bug,应用本身将发生无法预测的情况.”

你的控件库难道只支持ie浏览器?只支持windows?


引用
这个就不深入开展了,和上面所面临的问题都是一样的.它把Browser的问题回避了,把jdk的问题取而代之.


其实你所作的,和上面所面临的问题都是一样的。你把简单的问题都回避了,用更加复杂得多的问题取而代之。

能追求完全技术独立性的公司,恐怕全世界加起来也没有几家。ibm虽然有自己的jdk,但还是基于java规范。微软虽然有自己的操作系统,但还是基于其他公司的cpu。你所追求的,只能说是一个乌托邦式的理想。


----------------------------------------------------------------------------------
在IE浏览器里面,以ActiveX形式嵌入运行;如果是Firefox,以它支持的插件方式嵌入执行.原理是一样的.
控件库能够完整支持IE和Windows,对于一个公司产品来说已经是足够好的了.举例:Adobe flash player.

之所以要回避Browser,Jdk,javascript这些东西,主要的原因是这些软件升级的太频繁了,每次升级以后,在上面搭建的应用都需要测试兼容性.这种毫无附加值的工作会把所有的时间全部占掉,成本太高.
相对而言,os系列是相对稳定的,ms的操作系统虽然在升级,底层的API是相对稳定很多的.os升级带来的API变化虽然不能说绝对没有,但绝对比jdk,javascript的变化要小的多.
至于操作系统和cpu的关系就更加明确了,cpu的升级带来的只是速度和性能的提升,本身的机器语言并没有很大变化.正因为cpu的机器语言没有变化,升级cpu不换操作系统才是可能的;可是jdk,IE,javascript每次升级,调用接口都会有很大的变化.
所以说,基于cpu的机器语言开发,是最稳定的;基于os提供的API开发,相对差一点;基于IE,Jdk,Javascript开发,基础的稳定性就要差很多很多了.
0 请登录后投票
   发表时间:2009-06-03  
flash不满好吗!直接画,后台用java
0 请登录后投票
   发表时间:2009-06-03  
不看好可视化Web UI开发,因为:
1. 不够灵活;
2. 一旦代码和UI设计器不同步,维护成本就会非常高。

除了老老实实写代码,还没想出好的替代方案。
0 请登录后投票
   发表时间:2009-06-04  
其实一些大的厂商早实现可视化web ui开发了,比如ibm、oracle,可惜他们工具都不对外开放
国内金蝶好像也有自己的一套开发模式

感觉现在可视化开发一个是标准不完善、再就是没有个好的ide支持,如果ide足够强大能够自动维护代码和设计,很多问题就解决了
0 请登录后投票
   发表时间:2009-07-10  
liujunsong 写道
话说回来,上面的方案都有问题,那怎么办?怎么样才能彻底摆脱对外部产品的依赖?
我的看法是,如果要真正解决这个问题,就必须下决心一切从头开始,自己开发一套控件库,通过直接访问操作系统的方式,来完成界面的渲染工作.这样一来,才能摆脱浏览器升级的麻烦.
具体来说,就是需要做如下的工作:
1.自己定义界面的ui元素定义
2.自己定义一套界面的定义格式(由ui元素组成)
3.(核心)自己开发一个界面的渲染器,将界面定义直接渲染成图形界面,采用Activex形式嵌入到IE浏览器执行.

请问要是非IE浏览器不支持ActiveX怎么办?
非常欣赏你的胆识,但是我还是认为有现成的开嘛不用,一切从头开始不如在开源代码基础上修改。
0 请登录后投票
   发表时间:2009-07-10  
引用

4。有的developer做ui慢,是因为他不求甚解,不做研究,对javascript,css,html不熟。有些已经提供的功能都不知道用。对于这样的人,就算ui简单了,后台逻辑还是能累死他。



对于一个熟手来说,无论是用工具还是手工编码做界面,都不是问题,一个熟手会合理的利用工具。

与其在这个问题上伤脑筋,不如下点功夫培训一下这些生手,不要指望用工具去迁就他们。

在此c/s时代一个程序员不屑于html,js之类,这很正常;但b/s时代,对于html,js还是一知半解不屑于学习的程序员,应该为此感到羞愧。


0 请登录后投票
   发表时间:2009-07-12  
tomxh001 写道
其实一些大的厂商早实现可视化web ui开发了,比如ibm、oracle,可惜他们工具都不对外开放
国内金蝶好像也有自己的一套开发模式

感觉现在可视化开发一个是标准不完善、再就是没有个好的ide支持,如果ide足够强大能够自动维护代码和设计,很多问题就解决了



金蝶有自己的IDE,基于eclipse的BOSStudio,这个太庞大了,不是几杆枪一时半会儿能搞出来的,是个囊括整个软件生命周期的IDE。
另外他们用BOSStudio拖拽出来的界面是Swing,EAS的界面总体感觉还是可以的,这个基于Swing的界面框架其实思路倒是很清晰,就是受制于向后兼容性所以搞得很庞大。如果借用他的理念从头再搞一个,我觉得应该是非常了不得的东东


0 请登录后投票
论坛首页 Java企业应用版

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