互联网归根结底是一个展现内容的平台,在互联网上,页面的展现效果与艺术感被提高到了一个前所未有的高度。在不少互联网应用中,展现设计甚至比业务逻辑设计更为复杂,需求变化更为频繁。自从Web变成应用的载体后,人们就一直在为美工和程序员的分工而烦恼。于是,有了JSP/Servlet之分以及所谓的MVC架构。然而,时至今日这个问题并没有完美的解答。由于展示层负责直接与用户进行交互。系统的大部分行为需要由展现层发起,这导致展现层需要耦合控制逻辑;同时,所有的运行结果又需要由展现层来呈现,这又导致了展现层需要耦合业务模型。最终,不得不在展现层中嵌入大量的脚本代码,可能是Java代码片断,也可能是大量标签库及EL表达式的引入。
为了从根本上解决这个难题,OperaMasks创造性的引入了一种全新的编程模型:IoVC——“Inversion of View-Control”,即“视图控制反转”,换言之:它能够把对“View(即UI视图)的控制力”注入到您的后台业务逻辑中。这样一来,您在编写业务逻辑的过程中,对View拥有足够的控制力,从而能够将展现层与业务逻辑完全的解耦。
在传统的编程模型下,页面美工通过网页设计工具“画”出页面,交给程序员加入绑定逻辑。这些经过加工的页面,美工无法理解。需要改动展现时,要么程序员负责起维护展现内容,要么美工重新画出页面,程序员重新绑定。而在IoVC的帮助下,页面美工只需要给每个构件设置一个id,程序员在后台的业务逻辑中,便拥有对页面UI元素的完全控制力。Web页面在美工完成之后,程序员再也无需因为需求的变更,而重新维护Web页面内容。
IoVC所做的是将一个活动的、易变的、复杂的交互逻辑用不同的视图表现出来,Model和View都是对同一个事物的不同表述,就像在工程制图中用三个二维视图描述一个三维实体一样。Model关心的是业务逻辑,而View关心的是展现逻辑,但他们都是为应用逻辑服务的,因此是对应用逻辑的投影,当应用逻辑发生变化,它的两个投影也将同时发生变化。在传统的Web MVC中,Model和View之间存在一些辅助线,以帮助反映对逻辑实体的联动变化,IoVC去掉了这些辅助线,使整个架构更加简洁。
关于IoVC的更多信息请参考第 20 章 IoVC。