198 Lotus blogs updated hourly. Who will post next? Home | Blogs | Search | About 
 
Latest 7 Posts
[原]AlphaGo落幕了,围棋还将继续
Thu, Jun 1st 2017 3
[原]《马丁伊登》
Tue, Jan 31st 2017 4
[原]71. 从Lotus Notes表单到XPage——兼谈程序里的二进制文件和文本文件
Mon, Aug 15th 2016 6
[原][20, 3, 10].sort()
Tue, Aug 2nd 2016 5
[原]JavaScript单元测试
Fri, Jul 15th 2016 6
[原]用JavaScript编写业务逻辑?
Wed, Jul 13th 2016 7
[原]《罗辑思维不逻辑》之那些温柔的操纵
Thu, Jun 23rd 2016 5
Top 10
[原]命运
Fri, Apr 15th 2016 10
[原]81. Domino视图Web展现技术胪列
Wed, Oct 15th 2014 7
[原]用JavaScript编写业务逻辑?
Wed, Jul 13th 2016 7
[原]七、股票是什么?
Thu, Oct 15th 2015 6
[原]JavaScript单元测试
Fri, Jul 15th 2016 6
[原]71. 从Lotus Notes表单到XPage——兼谈程序里的二进制文件和文本文件
Mon, Aug 15th 2016 6
[原]84. 从视图索引说Notes数据库(下)
Sat, Nov 1st 2014 5
[原]85. BASIC和LotusScript中的Variant
Mon, Dec 1st 2014 5
[原]89. 基于Notes/Domino的文档工作流系统(一)
Thu, Jan 8th 2015 5
[原]94. 基于Notes/Domino的文档工作流系统(六)
Tue, Feb 3rd 2015 5


[原]71. 从Lotus Notes表单到XPage——兼谈程序里的二进制文件和文本文件
Twitter Google+ Facebook LinkedIn Addthis Email Gmail Flipboard Reddit Tumblr WhatsApp StumbleUpon Yammer Evernote Delicious
   

本文对比分析了Lotus Notes平台上两种视图技术。架构和运转过程的分析特定于Lotus Notes平台,其后的关于二进制文件和文本文件的讨论则具有普遍性。(严格地说,XPages指的是IBM基于Lotus Domino和JSF的快速开发技术,XPage则指单个页面,两者的首两个字母都大写。笔者一直遵守这个拼写上的规则。)
架构
XPages的引入是Lotus Notes作为一个开发平台二十多年的历史中最具革命性的变化。从架构上讲,最根本的变化就是把视图和数据定义分离开。这里的视图不是指Notes视图,而是应用程序中展现给用户的界面部分。在传统的Lotus Notes应用程序里,表单既是用户界面,又负责定义字段。这样虽然使视图设计和数据设计的工作合二为一,加快了开发速度,但是视图和数据过于紧密不可拆分的联系大大束缚了系统的结构,不仅减少了灵活性,而且很多时候成为负担。新的XPage则和后端的数据设计没有直接的关系。表单退化成仅仅定义各种类型的文档的字段,也就是定义应用程序用到的各种数据实体存储在数据库时对应的容器的规范,类似于基于关系型数据库的应用程序里的表定义。设计表单时不用考虑用户界面,可以使这些“表”设计得更紧凑、合理、高效。另一方面,以XPage作界面解脱了与后端数据库的结构的捆绑,能够专心适应用户对界面的要求,免去了原来每个表单后面拖着的文档的负担,并且可以接合更广泛的数据类型,实现更灵活的处理。
运转过程
除去架构上的优点,XPage作为一种视图技术与Lotus Notes表单也有很大的差异。从运转过程来说,在一个典型的客户端服务器环境的应用程序里,开发人员设计的表单直接以二进制格式存储于服务器上的某个数据库里,随用户打开文档的操作被传输到Notes客户端,然后由客户端解释,最终展现在用户眼前;XPage页面对应的是XML格式的文本文件,XPages设计时引擎首先将它一一对应转化成Java源文件,然后编译成字节码的class文件,用户从浏览器请求某个页面时,XPages运行时引擎装入该XPage对应的class文件,执行生成前端文件(包括HTML、CSS和JavaScript等),返回给浏览器,最后浏览器再解释这些文件将页面呈现给用户。
二进制文件与文本文件
上面提到表单和XPage在存储格式上的不同,这也是两种技术本质上的重大差别。表单和其他传统的设计元素一样,都是以Lotus Notes私有的“复合数据”(Composite Data简称CD)二进制格式存储在数据库里,只能用Designer和Notes客户端这些特定的软件写入、读取和识别(NotesPeek是IBM提供的一个可以一窥Lotus Notes数据库和各个设计元素内部组成的小工具http://www-01.ibm.com/support/docview.wss?uid=swg24005686)。XPage则是以文本格式保存(当然也是被包容在一个Lotus Notes数据库的基本存储单元note内)。这个二进制与文本格式的差异意味着什么呢?
首先是文件的编辑方式。二进制文件因为对人是不可读的,只能借助于专门的软件读取和修改。此软件将二进制的代码转换成对人有意义的形式,如属性,再将在此形式下的修改转换回二进制代码保存。文本文件则使用任何文本编辑器都能阅读和修改。在涉及到诸如表单和XPage这样的界面文件时,现代的开发工具基本上都装备了可视化的编辑器,用户只需在视图上添加控件,拖拉位置和修改属性就能完成界面设计。似乎背后采用的是二进制还是文本格式关系不大。但是能够以文本形式编辑在某些场合仍然更加便利。比如要批量修改多个对象的属性时,在可视化的编辑环境里使用属性框时,有两种途径可循。第一种是很多开发环境都采用的,即选中多个对象后,在属性框里允许有相同值的属性处可以统一地编辑,新的值会被应用到所有选中的对象。Domino Designer在同时修改多个设计元素的属性(如继承的模版、是否允许设计变更和刷新更新等)时就是如此。第二种方法比较少见,是将某一个对象的某一种属性的当前值复制到其他同类对象上。Designer在编辑视图时,很多视图列的属性就可以这种方式应用到所有列上。
其次是文件的可移植性。字节顺序,数据对齐(Data alignment),这些问题对于文本文件和二进制文件都是存在的。Unicode用Byte order mark标志字节顺序(endianess)。Java class文件是big endian。文本文件因为每个字符都具有跨平台的明确含义,并且占用的字节数也是固定的,跨机器的文件复制对用户来说是完全透明的。只要使用一致的字符编码,在任何机器上读写文本文件都没有差别。具体到Lotus Notes的环境,传统的设计元素采用的二进制格式在不同平台的存储器里遵循的规则就可能不同。例如,运行在Intel x86机器上的Lotus Notes客户端和运行在基于POWER指令集的机器上的Lotus Domino服务器,一个数据库里的设计元素在这两台机器的存储器里就具有不同的字节顺序【注1】。所以Lotus Notes读写数据库的API规定了不依赖于底层机器的数据标准,各个平台上的不同的Lotus Notes/Domino版本的本机代码负责在所在平台的底层编码和这个标准之间转换【注2】。XPage和生成的Java文件都是文本格式的,先天就更容易在不同平台间移植,就像其他常用的跨平台的web开发的脚本语言一样。
第三是文件的版本控制。在比较版本之间的差异,合并分支版本等版本控制的常见任务上,文本文件都比二进制文件容易很多。Lotus Notes平台上迟迟出现的版本控制功能便是利用DXL将设计元素从二进制格式转换成XML的文本文件,其中的XPage相关文件就省去了转换的步骤。

注1:Intel x86平台的字节顺序是little endian,POWER的是big endian。
注2:参看Lotus C API for Domino and Notes的TYPE_xxx - Item Data Type definitions.、ODSReadMemory - Convert a structure from canonical format to machine-specific format.、ODSWriteMemory - Convert a structure from machine-specific format to canonical format.三页。

作者:starrow 发表于2016/8/15 12:20:21 原文链接
阅读:0 评论:0 查看评论


---------------------
http://blog.csdn.net/starrow/article/details/52210058
Aug 15, 2016
7 hits



Recent Blog Posts
3
[原]AlphaGo落幕了,围棋还将继续
Thu, Jun 1st 2017 9:41a   Pan Starrow
柯洁与AlphaGo的巅峰绝响落幕了,这无疑为近几年来很火的人工智能又添了一把柴。媒体上有很多文章分析AlphaGo所用的技术,但这次比赛对围棋的影响同样是十分深远的。 19岁的当今世界围棋第一人柯洁与重装上阵的AlphaGo之间的三番棋决战,再次将间歇性棋迷的我拉到电脑屏幕前,每一盘跟着对局双方不吃午饭地熬了几个小时。看到第三局开始不久柯洁脸上无奈和痛苦的表情
4
[原]《马丁伊登》
Tue, Jan 31st 2017 4:08p   Pan Starrow
看到微博上锵锵三人行最新一期节目的介绍时,我心中一惊,怎么会这么巧。刚看完杰克伦敦的马丁伊登,许子东就要谈这本他认为改变自己人生的书。马丁伊登不至于改变我的人生,但也是给我印象最深刻的小说之一。作家有两类。一类社会型的作家喜欢观察别人的生活,写别人的故事。一类自我型的作家擅长描写自己的见闻,抒发个人的感情。我个人偏好后者,并且偏见




Created and Maintained by Yancy Lent - About - Planet Lotus Blog - Advertising - Mobile Edition