101. Domino 10 就要来了

根据IBM网站上的公告,Domino V10将于2018年10月9日发布,为此网页上方还做了一个倒计时。说实话,我最近看到这些新闻时,是颇有些讶异的。距离2013年发布V9已经过去了五年,Domino历史上从来没有间隔这么长时间才推出新版本。包括我在内的很多人的判断都是9将成为Domino最后一个版本。导致和支持这种猜测的证据很多。Domino的市场份额持续走低,XPages也没有挽回颓势,IBM对Domino的重视和投入明显下降,Domino与其他技术平台的差距愈益明显,开发人员群体持续老化,为了给购买软件的大客户吃一剂定心丸,IBM像是用一种委婉宣布死刑的方式,确认对Domino的支持会延续到2021年。

就在这个稳步消亡的过程中,IBM于去年透露出将发布V10的消息,现在新版本的面目缓缓浮现出来。Domino V10是IBM和印度的HCL公司共同推出的。之前有传闻说HCL将接手Domino产品,这次的合作应该就是IBM最后送上一程,如果直接放手交给HCL,不仅会对客户的信心造成很大震动,也违背了IBM的承诺。

对于一篇介绍软件新版本的文章来说,上面这些没有喜气洋洋的文字显得突兀和古怪了。下面我们就看看Domino V10带来了哪些变化。

首先和最明显可以注意到的是软件的名称。没有Lotus、IBM Lotus和IBM这些此前用过的品牌前缀,不再是Notes/Domino。前者的含义大家估计已经能领会了,后者则揭示了一个重大变化,这次更新的是服务器,Notes客户端和Domino服务器如影随形的组合已经被打破了,Notes客户端被彻底边缘化了。我早前在《99. Domino开发领域的动态》一文中就分析了IBM首鼠两端的心态,既想向Web技术转型,又不忍心放弃Notes客户端,做了很多低效的,相互矛盾的选择。现在,IBM终于承认Notes客户端没有出路。当然,Notes客户端还是会随着新版本的Domino一起推出,版本号也会升级到10,也会有那么两三项改进。

服务器原有技术领域内的改进会明显一些,根据已经披露出来的少得可怜的资料,包括集群的改进、数据库的修复和可以在JavaScript中使用的一种数据查询语言DQL。XPages方面应该也会升级Java版本及相关的工具。

假如只是这些东西,IBM就是在逗大家玩,V10最大的变化是再次彻底改变了程序开发的模式。Domino将支持Node.js来开发应用!

对于熟悉Node的朋友,Node是什么自然不用我赘述;即使是没有用过Node,但使用Java、C#、PHP、Ruby和Python等其他编程语言开发Web应用的朋友,估计对Node的异军突起和它的原理也有所了解;所以这里我只对没有接触过Node的朋友做一个简单的介绍。Node是一个JavaScript的运行环境,主要用来开发网络应用,通常部署在服务器上,通过HTTP协议和客户端通讯。在服务器端运行JavaScript,并不是一件新鲜事,Node有什么了不起呢?首先,Node充分利用JavaScript的事件模型,异步运行代码,十分适合作为服务器来处理大量网络请求。其次,Node使用的是JavaScript引擎中的佼佼者——V8,Chrome浏览器所用的JavaScript引擎。最后,Node搭上了近年来JavaScript的快速发展的东风,目前Node的代码生态圈NPM已经是世界上最大的开源代码库。

使用Node来开发Web应用程序的架构是怎样的呢?运行在服务器端的JavaScript负责数据库读取、身份校验和业务逻辑,浏览器中的页面作为应用程序的视图层,其中运行的JavaScript负责视图的更新,当然某些Web应用程序架构更向前端倾斜,部分业务逻辑也可以在浏览器中运行。浏览器和服务器之间通过RESTful的Web services沟通。因为前后端运行的都是JavaScript的代码,所以大量采用JSON数据。前端流行的JavaScript库和框架包括React、Angular和Vue。Node和Domino协作时,整个架构如下图所示。

说到这里,Domino程序员可能会有些困惑,XPages出了什么问题?为什么又要转向全新的Web开发模式?学习成本高不高?

先说说最后一个问题,Node相较于其他主流的Web开发平台,是比较简单的。JavaScript是Web开发者的必备技能,大家只需要学习如何在Node应用程序中编写服务器端的代码。比较复杂的是前端的脚本,React和Angular都是设计优良、功能强大的库,但要掌握,都要付出一定的时间和精力,尤其是后者。

再来看前面两个问题。XPages推出的时候,大家都感觉Domino的Web开发终于拥抱了开放的技术,赶上了外部的潮流。但实际上,IBM选择的方案有两个缺点。XPages是一种结合了Notes功能的JSF的实现。JSF作为基于组件的Web框架,本身就逊色于基于请求的框架,这一点可以参看我之前写的《两种类型的Web框架: 基于请求的和基于组件的》。就JSF阵营本身来说,XPages在发展上也逐渐落后于包括Oracle官方版本之内的其他实现。这里可以取一个小小的观察角度,XPages也使用服务器端的JavaScript,但是它用的是IBM自己开发的基于Java的版本,不仅在性能上逊色于V8引擎,更重要的是该版本遵循的是ECMAScript 1999的陈旧标准,现在的JavaScript开发者普遍使用的各种语法和功能都不存在。这些也是Domino平台最初被XPages激起涟漪,渐渐恢复死水的原因。

Domino的开发者要拥抱这个全新的模式,除了学习具体的新技术,还要具备一些主流开发平台的程序员熟悉的知识和视角。MVC(模型——视图——控制器)架构就是重要的一环。它是图形界面的应用程序万变不离其宗的结构,掌握它对各种环境下理解和开发应用程序都大有益处。Node上应用的一种流行的MVC框架就是Express。聪明的朋友或许已经发现,在Domino新的开发模式中,服务器端代码运行在Node上,客户端代码运行在浏览器中,Domino充当的就是数据库服务器的角色,提供用户和其他业务文档。如果将Domino换成其他文档型甚至关系型数据库,Domino程序员就彻底和其他平台的开发者没有任何区别了。Domino原先的特点是将各种功能集于一身的平台,在Notes客户端、快速开发等功能逐渐落伍后,平台最宝贵的财富和许多大企业不愿意迁移的原因就是其中的数据。

拙著《Live软件开发面面谈》包含的接口、事件编程、MVC、界面设计、文档型和关系型数据库比较、权限模型等各章的内容对于习惯使用Domino独特技术的开发人员认识更广阔的世界、迎来职业生涯的新阶段颇有助益。剩下的从其他开发技术的角度分析Domino平台的特点和其兴衰原因的内容相信也能给大家以启发。希望各位老读者多多捧场:

《Live软件开发面面谈》(京东)

《Live软件开发面面谈》(当当)

《Live软件开发面面谈》(天猫)

目录

第1章  接口
1.1  使用接口编程
1.2  依赖反转原则
1.3  如何实现
1.3.1  工厂模式
1.3.2  服务定位器模式
1.3.3  依赖注入
1.4  真的实现了吗
1.4.1  依赖的传递性
1.4.2  依赖的形式
1.5  真正的实现
1.5.1  配置文件
1.5.2  配置代码
1.5.3  惯例先于配置
1.5.4  元数据
1.5.5  实现消除依赖的方法的本质
1.6  有必要针对接口编程吗
1.6.1  针对接口编程的成本
1.6.2  接口的意义
1.6.3  何时针对接口编程?
第2章  事件
2.1  控制反转
2.2  观察者模式
2.3  Java中的事件编程
2.3.1  通用的事件发布者和收听者
2.3.2  通用事件收听者的问题
2.3.3  Swing用户界面里的事件编程
2.3.4  专用事件收听者的问题
2.3.5  彻底地面向对象
2.3.6  Java 8带来的福音
2.3.7  这一切背后仍然是对象
2.4  C#中的事件编程
2.4.1  代理
2.4.2  事件
2.5  JavaScript中的事件编程
2.6  事件编程的其他细节
2.6.1  收听者的执行顺序
2.6.2  收听者是否在单独的线程执行
2.6.3  控件层次中的事件传播
第3章  MVC
3.1  输入、处理和输出
3.1.1  冯诺依曼架构
3.1.2  矩阵运算器和IPO
3.1.3  矩阵运算器和IPO的升级版
3.2  程序与用户的交互
3.2.1  三类应用程序
3.2.2  持续交互带来的变化
3.2.3  图形用户界面带来的变化
3.3  设计理念
3.3.1  关注点分离
3.3.2  模型
3.3.3  模型和视图的分离
3.3.4  控制器
3.3.5  模型视图
3.3.6  事件发布者与收听者之间的依赖
3.3.7  合作方式
3.4  桌面应用程序与移动App
3.4.1  控制器和视图在代码单元上独立
3.4.2  控制器、视图和模型之间的相互引用
3.4.3  控制器和视图合一
3.4.4  移动App
3.5  Web应用程序
3.5.1  Web应用程序简史
3.5.2  服务器端的MVC
3.5.3  前端控制器与控制器
3.5.4  视图
3.5.5  模型
3.5.6  依赖注入
3.5.7  浏览器端的MVC
3.6  类型转换、校验和数据绑定
3.7  MVC的意义
第4章  界面
4.1  以用户界面为中心 VS 以业务逻辑为中心
4.2  设计视图 VS 源代码视图
4.3  自定义控件 VS 复合控件
4.4  命令式语言 VS 声明式语言
4.5  内容与外观的分离
4.6  基于请求的框架 VS 基于组件的框架
4.7  极简主义
4.7.1  用户界面上的极简主义
4.7.2  删减的对象
4.7.3  方法和特征
4.7.4  防止过度
第5章  数据库
5.1  多值与复合属性
5.1.1  关系型数据库模式的第一和第二范式
5.1.2  范式与复合、多值属性
5.1.3  关系型数据库中的多值和复杂数据类型
5.2  数据库模式
5.3  数据建模
5.3.1  抽象的数据建模
5.3.2  针对具体数据库的建模
5.4  视图
5.4.1  索引
5.4.2  关系型数据库中的视图
5.4.3  文档型数据库中的视图
5.5  可伸缩性
5.6  可得性与BASE
5.7  编程接口
5.8  总结
第6章  权限
6.1  身份验证
6.1.1  验证类型
6.1.2  验证属性
6.1.3  知识要素验证
6.2  Web应用的验证
6.2.1  验证与会话
6.2.2  第三方身份验证
6.3  授权
6.4  基于角色的存取控制
6.4.1  用户与权限
6.4.2  群组与角色
6.4.3  权限与操作
6.4.4  实现
6.5  基于属性的存取控制
6.5.1  资源与存取方式
6.5.2  从权限到属性
第7章  异类
7.1  快速开发能有多快?
7.2  Lotus Notes是什么
7.2.1  一个工作流系统的样例
7.3  技术架构
7.3.1  数据库
7.3.2  客户端与服务器
7.4  应用程序开发
7.4.1  两种路径
7.4.2  用户界面驱动的快速开发
7.4.3  事件驱动编程
7.4.4  直接使用文档对象编程
7.4.5  权限模型
7.4.6  角色和隐藏公式
7.4.7  三类应用程序
7.4.8  多种编程语言
7.5  Lotus Notes的衰亡及其教训
7.5.1  对用户主观体验重视不够
7.5.2  快速开发的缺陷
7.5.3  嵌入式开发的缺陷
7.5.4  数据库和应用程序合一
7.5.5  创新乏力
7.6  给现有Lotus Notes客户的建议
第8章  兴衰
7.1  软件的更新和生命
7.1.1  兼容性
7.1.2  兼容性与创新
7.2  客户端的兴衰
7.2.1  客户端与服务器
7.2.2  远程过程调用和数据传输协议
7.2.3  客户端的胖瘦趋势
7.2.4  客户端与浏览器
7.2.5  浏览器与App
7.2.6  理想的客户端应用程序
7.2.7  开发人员体验 VS 用户体验
7.3  Lotus Notes的历史
7.3.1  前身
7.3.2  青少年:版本1-3
7.3.3  中年:版本4-6
7.3.4  老年:版本7-9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值