CN101872305B - Ui表现和业务逻辑分离方法和系统 - Google Patents
Ui表现和业务逻辑分离方法和系统 Download PDFInfo
- Publication number
- CN101872305B CN101872305B CN 201010199861 CN201010199861A CN101872305B CN 101872305 B CN101872305 B CN 101872305B CN 201010199861 CN201010199861 CN 201010199861 CN 201010199861 A CN201010199861 A CN 201010199861A CN 101872305 B CN101872305 B CN 101872305B
- Authority
- CN
- China
- Prior art keywords
- binding
- service data
- state
- data object
- behavior
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明披露了一种UI表现和业务逻辑分离方法和系统,该方法包括:通过数据绑定使UI对象与业务数据对象相互关联;通过状态绑定使UI对象的状态与业务数据对象的状态相关联;通过行为绑定使UI对象的行为与业务数据对象的行为相关联;以及步骤四,通过逻辑模型绑定来统一管理数据绑定、状态绑定和行为绑定,从而实现UI模块与业务数据对象之间的动态、间接的关联。因此,通过本发明,解除了用户界面和逻辑代码之间的强制依赖关系,以在设计期间,用户界面设计和业务逻辑编程可作为完全独立的两项工作并行开展,而在软件运行时,UI对象和业务逻辑处理对象相互独立,支持动态切换UI视图和更改逻辑处理单元。
Description
技术领域
本发明大体上涉及软件开发领域,更具体地,涉及一种UI表现和业务逻辑分离方法和系统,其可应用于软件开发活动中实现用户界面设计和程序代码的设计分离和并行开展,同时还适用于在软件系统中支持动态用户界面和动态业务逻辑的应用场景。
背景技术
在网络和软件技术持续发展的情况下,用户期待更丰富的交互体验,从而催生了各种旨在增强用户体验、提高开发效率的开发技术,如ASP.Net、WPF(Windows Presentation Foundation,Windows表现基础)、Silverlight(银光)等。这些技术在用户界面(UserInterface,以下简称为UI)实现方面有以下共同的特性:
使用可扩展标记语言(Xml:Extensible Markup Language)描述UI元数据;
用户界面通过绑定机制获取和更新业务数据;
通过事件机制响应用户的操作;
使用代码隐藏方法使UI设计更倾向于关注用户体验,而不用过多关注与程序代码的交互;以及
UI元数据和程序代码在编译时进行关联,UI模块和代码模块一般需要确定明确的对应关系。
可见,虽然以上技术在一定程度上实现了用户界面和业务逻辑的分离,提高了开发效率和用户体验,但仍依赖于代码隐藏实现的分离方式,因而在设计和运行期间,UI模块和业务逻辑代码模块仍存在部分耦合关系。
其中,代码隐藏是指在UI元数据中以声明的方式标注相应的逻辑处理模块,指定响应用户界面的代码单元,从而实现描述界面的UI元数据和处理逻辑的代码文件在设计时相对独立。在运行期间,UI元数据和逻辑代码会被加载为同一个对象,如ASP.Net的页面对象或WPF的窗体对象,这个单独的对象既是UI对象,也是逻辑处理对象。
在通常情况下,软件的某个功能模块包括该业务数据、逻辑操作,以及用户界面(UI)。其中,业务数据是功能模块要处理或生成的数据对象,逻辑操作是对业务数据的处理过程和方法,用户界面向用户呈现业务数据,并负责把用户的操作映射为逻辑操作,并把操作的结果反馈给用户。
现有技术一般通过数据绑定、事件机制处理用户界面与业务数据和业务逻辑处理模块间的交互。具体如图1所示。
其中,数据绑定为应用程序呈现和操作业务数据提供了一种简单的途径。通过在UI对象和数据对象间建立双向通知和更新的关联通道,使得绑定一方的更改可以被直接反映到绑定的另一方而不需要业务逻辑代码的参与。
另外,事件机制是UI对象针对用户操作产生响应通知的消息机制。当用户在程序界面中执行特定的命令,比如点击按钮或菜单时,对应的按钮或菜单发出事件消息,业务逻辑模块通过处理事件消息,从而对用户操作指令做出相应的业务逻辑操作。
因此,根据现有技术的特性,程序模块设计和运行期间表现为如图2所示的形式。
也就是说,在设计时,通过代码隐藏关联界面元数据和代码文件,而在运行时,UI对象和业务逻辑对象被包装在同一个程序对象中,这个程序对象既包含用户界面呈现,又包含业务逻辑处理,同时负责这两个单元的交互。不论是在设计时还是在运行时,UI和业务逻辑都没有完全解除耦合关系,也使设计时并行开发、运行时动态切换UI或逻辑等需求难以实现。
可见,由于上述这种耦合关系的限制,在实际应用中,尤其是某些特定应用场景中,现有技术至少存在以下不足:
一、UI设计和逻辑编程的并行开展存在限制。因为UI元素依赖代码隐藏实现与逻辑代码的交互,同时逻辑代码不能完全避免对UI元素的访问,编写业务逻辑代码前,往往需要UI设计先生成代码框架,再填充逻辑代码;而UI设计的更改,通常也需要同步修改代码文件。
二、在各个企业的管理软件中,经常会有根据不同用户切换界面视图,或者相同的功能模块在不同的行业特性下执行不同的业务逻辑的需求。
因此,在现有技术中,UI模块和代码模块通常存在一一对应关系,使得动态切换界面视图和动态更改业务处理逻辑难以实现。
发明内容
鉴于上述情况,本发明旨在提供一种UI表现和业务逻辑分离方法和系统,从而解除用户界面和逻辑代码之间的强制依赖关系,以在设计期间,用户界面设计和业务逻辑编程可作为完全独立的两项工作并行开展,而在软件运行时,UI对象和业务逻辑处理对象相互独立,支持动态切换UI视图和更改逻辑处理单元。
根据本发明的一个方面,UI表现和业务逻辑分离方法包括以下步骤:步骤一,通过数据绑定使UI对象与业务数据对象相互关联,从而实现UI对象与业务数据对象在数据层面的分离;步骤二,通过状态绑定使UI对象的状态与业务数据对象的状态相关联,从而实现UI对象与业务数据对象在状态控制层面的分离;步骤三,通过行为绑定使UI对象的行为与业务数据对象的行为相关联,从而实现UI对象与业务数据对象在行为层面的分离;以及步骤四,通过逻辑模型绑定来统一管理数据绑定、状态绑定和行为绑定,从而实现UI模块与业务数据对象之间的动态、间接的关联。
在步骤一中,使用数据绑定,在UI对象与业务数据对象之间建立双向通知和更新的关联通道,从而UI对象与业务数据对象中的任一方发生更改都通过数据绑定而被反映到另一方,而无需业务逻辑代码的参与。
可选地,在步骤一中,UI对象的UI元数据在初始布局过程中被指定绑定源和绑定路径,在UI元数据被加载并创建为UI对象时,根据绑定源和绑定路径来自动获取UI元数据,并且在UI对象与业务数据对象中的任一方发生更改时,同步更新UI元数据的绑定源。
在步骤二中,在UI对象与业务数据对象之间经由状态管理器来建立关联,并且当业务数据对象的状态改变时,业务数据对象可控地同步修改状态管理器的状态值,并通过状态绑定自动刷新UI对象的状态。
在步骤三中,在设计时,脚本化描述UI对象与业务数据对象的行为而无需为UI对象的事件指定行为逻辑代码,从而使UI对象与业务数据对象在设计过程中不存在相互依赖。而在运行时,所述业务数据对象与所述UI对象的事件以及用户的响应无关,而仅与对所述业务数据对象的业务数据的逻辑操作相关。
此外,在步骤四中,通过逻辑模型为UI对象指定数据绑定、状态绑定和行为绑定的提供者,并且通过逻辑模型绑定在UI对象与业务数据对象之间建立通道,为数据绑定、状态绑定和行为绑定提供支持。
根据本发明的另一个方面,UI表现和业务逻辑分离系统包括:数据绑定单元,用于使UI对象与业务数据对象相互关联,从而实现UI对象与业务数据对象在数据层面的分离;状态绑定单元,用于使UI对象的状态与业务数据对象的状态相关联,从而实现UI对象与业务数据对象在状态控制层面的分离;行为绑定单元,用于使UI对象的行为与业务数据对象的行为相关联,从而实现UI对象与业务数据对象在行为层面的分离;以及逻辑模型绑定单元,用于统一管理数据绑定、状态绑定和行为绑定,从而实现UI模块与业务数据对象之间的动态、间接的关联。
其中,在数据绑定单元中,在UI对象与业务数据对象之间建立双向通知和更新的关联通道,从而UI对象与业务数据对象中的任一方发生更改都通过数据绑定而被反映到另一方,而无需业务逻辑代码的参与。
此外,在数据绑定单元中,UI对象的UI元数据在初始布局过程中被指定绑定源和绑定路径,在UI元数据被加载并创建为UI对象时,根据绑定源和绑定路径来自动获取UI元数据,并且在UI对象与业务数据对象中的任一方发生更改时,同步更新UI元数据的绑定源。
在状态绑定单元中,在UI对象与业务数据对象之间经由状态管理器来建立关联,并且当业务数据对象的状态改变时,业务数据对象可控地同步修改状态管理器的状态值,并通过状态绑定自动刷新UI对象的状态。
而在行为绑定单元中,在设计时,脚本化描述UI对象与业务数据对象的行为而无需为UI对象的事件指定行为逻辑代码,从而使UI对象与业务数据对象在设计过程中不存在相互依赖。而在运行时,所述业务数据对象与所述UI对象的事件以及用户的响应无关,而仅与对所述业务数据对象的业务数据的逻辑操作相关。
在逻辑模型绑定单元中,通过逻辑模型为UI对象指定提供数据绑定、状态绑定和行为绑定的提供者,并且在UI对象与业务数据对象之间建立通道,为数据绑定、状态绑定和行为绑定提供支持。
因此,本发明通过实现数据绑定、行为绑定、状态绑定、逻辑模型绑定等机制,结合现有的用可扩展标记语言描述UI界面、事件机制等开发技术,最终实现UI单元和业务逻辑单元的相互独立并可以动态组合。
附图说明
图1是现有技术的UI界面与业务数据和业务逻辑处理模块之间的交互关系的示意图;
图2是现有技术的程序模块设计和运行期间的表现形式的示意图;
图3是根据本发明的UI表现和业务逻辑分离方法的流程图;
图4是根据本发明的UI表现和业务逻辑分离系统的框图;
图5是根据本发明实施例的通过数据绑定、状态绑定、行为绑定和逻辑模型绑定实现的界面与业务逻辑彻底分离方法的示意图;
图6是根据本发明实施例的订单操作模块在应用程序中的界面对象与业务数据对象之间的关系的示意图;
图7是根据本发明实施例的状态管理器的层次结构的示意图;
图8是根据本发明实施例的状态绑定处理的原理示意图;
图9是由于采用事件处理而使得UI与业务逻辑难以分离的示意图;
图10是根据本发明实施例的由于使用行为绑定而使UI与业务逻辑没有了直接依赖关系的示意图;
图11是根据本发明实施例的逻辑模型绑定在设计时和运行时的内部处理方式的示意图。
具体实施方式
以下将结合附图详细描述本发明的实施例。
本发明描述的分离用户界面和业务逻辑的方案,通过实现数据绑定、行为绑定、状态绑定、逻辑模型绑定等机制,结合现有的用可扩展标记语言描述UI界面、事件机制等开发技术,最终实现一个UI单元和业务逻辑单元相互独立并可以动态组合的系统。
图3是根据本发明的UI表现和业务逻辑分离方法的流程图。如图3所示,该方法包括以下步骤:
步骤S302,通过数据绑定使UI对象与业务数据对象相互关联,从而实现UI对象与业务数据对象在数据层面的分离;
步骤S304,通过状态绑定使UI对象的状态与业务数据对象的状态相关联,从而实现UI对象与业务数据对象在状态控制层面的分离;
步骤S306,通过行为绑定使UI对象的行为与业务数据对象的行为相关联,从而实现UI对象与业务数据对象在行为层面的分离;以及
步骤S308,通过逻辑模型绑定来统一管理数据绑定、状态绑定和行为绑定,从而实现UI模块与业务数据对象之间的动态、间接的关联。
在步骤S302中,使用数据绑定,在UI对象与业务数据对象之间建立双向通知和更新的关联通道,从而UI对象与业务数据对象中的任一方发生更改都通过数据绑定而被反映到另一方,而无需业务逻辑代码的参与。
可选地,在步骤S302中,UI对象的UI元数据在初始布局过程中被指定绑定源和绑定路径,在UI元数据被加载并创建为UI对象时,根据绑定源和绑定路径来自动获取UI元数据,并且在UI对象与业务数据对象中的任一方发生更改时,同步更新UI元数据的绑定源。
在步骤S304中,在UI对象与业务数据对象之间经由状态管理器来建立关联,并且当业务数据对象的状态改变时,业务数据对象可控地同步修改状态管理器的状态值,并通过状态绑定自动刷新UI对象的状态。
在步骤S306中,在设计时,脚本化描述UI对象与业务数据对象的行为而无需为UI对象的事件指定行为逻辑代码,从而使UI对象与业务数据对象在设计过程中不存在相互依赖。而在运行时,所述业务数据对象与所述UI对象的事件以及用户的响应无关,而仅与对所述业务数据对象的业务数据的逻辑操作相关。
此外,在步骤S308中,通过逻辑模型为UI对象指定数据绑定、状态绑定和行为绑定的提供者,并且通过逻辑模型绑定在UI对象与业务数据对象之间建立通道,为数据绑定、状态绑定和行为绑定提供支持。
图4是根据本发明的UI表现和业务逻辑分离系统400的框图。如图4所示,该系统包括:数据绑定单元402,用于使UI对象与业务数据对象相互关联,从而实现UI对象与业务数据对象在数据层面的分离;状态绑定单元404,用于使UI对象的状态与业务数据对象的状态相关联,从而实现UI对象与业务数据对象在状态控制层面的分离;行为绑定单元406,用于使UI对象的行为与业务数据对象的行为相关联,从而实现UI对象与业务数据对象在行为层面的分离;以及逻辑模型绑定单元408,用于统一管理数据绑定、状态绑定和行为绑定,从而实现UI模块与业务数据对象之间的动态、间接的关联。
其中,在数据绑定单元402中,在UI对象与业务数据对象之间建立双向通知和更新的关联通道,从而UI对象与业务数据对象中的任一方发生更改都通过数据绑定而被反映到另一方,而无需业务逻辑代码的参与。
此外,在数据绑定单元402中,UI对象的UI元数据在初始布局过程中被指定绑定源和绑定路径,在UI元数据被加载并创建为UI对象时,根据绑定源和绑定路径来自动获取UI元数据,并且在UI对象与业务数据对象中的任一方发生更改时,同步更新UI元数据的绑定源。
在状态绑定单元404中,在UI对象与业务数据对象之间经由状态管理器来建立关联,并且当业务数据对象的状态改变时,业务数据对象可控地同步修改状态管理器的状态值,并通过状态绑定自动刷新UI对象的状态。
而在行为绑定单元406中,在设计时,脚本化描述UI对象与业务数据对象的行为而无需为UI对象的事件指定行为逻辑代码,从而使UI对象与业务数据对象在设计过程中不存在相互依赖。而在运行时,所述业务数据对象与所述UI对象的事件以及用户的响应无关,而仅与对所述业务数据对象的业务数据的逻辑操作相关。
在逻辑模型绑定单元408中,通过逻辑模型为UI对象指定数据绑定、状态绑定和行为绑定的提供者,并且在UI对象与业务数据对象之间建立通道,为数据绑定、状态绑定和行为绑定提供支持。
如上所述,为实现界面和业务逻辑更彻底的分离,本发明提出了一种通过数据绑定、状态绑定、行为绑定和逻辑模型绑定实现的分离方案。其中,数据绑定实现数据到UI的映射,使业务数据可以从UI界面或逻辑操作模块中独立出来;状态绑定同步数据状态和UI对象状态,为UI界面控件如命令按钮等提供状态切换支持;行为绑定替代现有技术中的事件机制,解除UI对象和业务逻辑代码间的依赖关系;逻辑模型绑定在整个UI对象和逻辑处理模块间建立通道,为数据绑定、状态绑定、行为绑定提供支持。具体如图5所示,示出了如何通过数据绑定、状态绑定、行为绑定和逻辑模型绑定实现的界面与业务逻辑彻底分离方法。
接下来,将参考附图以具体实施例的形式来对本发明的数据绑定、状态绑定、行为绑定以及逻辑模型绑定进行详细描述。
首先,数据绑定作为一项现有的通用技术,简化了应用程序开发。数据绑定技术是实现UI与数据分离方法的基础,同时也为实现其他绑定技术提供了参考模型。
在本发明中,UI对象和业务数据对象经过绑定通道直接关联,更改通知机制负责在一方发生更改时通知绑定的另一方做出反应。这样,避免了由业务逻辑模块处理UI对象并转换为业务数据的操作。同时,绑定机制动态更改绑定上下文,同一个界面可处理不同的业务数据对象而不需做出改动。
例如,在常见的订单操作模块中,单据数据包含订单号、客户、数量等业务数据项。该订单操作模块在应用程序中表现为如图6所示的界面对象和业务数据对象。
因此,从图6看出,通过绑定机制,当订单窗口OrderForm绑定到数据对象订单Order后,界面自动显示Order对象的相关数据,当用户在界面更改数据后,绑定机制自动更新Order数据对象;在该功能模块中,程序代码不需关心如何获取界面相关文本框的内容并设置到Order对象中。
可见,数据绑定为UI界面提供数据呈现和交互途径。在布局元数据中指定绑定源和绑定路径,元数据被加载并创建为UI对象后,控件可根据绑定上下文自动获取绑定的数据,并在更改时同步更新绑定源。
在管理软件中,业务数据通常会有不同的状态,在不同的状态下用户界面会表现出不同的可用性或可见性。当用户操作命令使业务数据对象状态发生改变时,UI界面会做出相应的调整。例如订单操作,订单可能处于待确认、待付款、待发货、已发货等状态。不同状态下,订单具有不同的操作逻辑如是否可更改、是否可撤消、是否可发货等情况,这要求订单界面同时也能反映订单状态,确定用户可以执行哪些操作,不可以执行哪些操作。
在通常的开发中,界面状态需要业务逻辑模块根据业务数据状态设置,需要较多的状态判断操作,并且逻辑代码需要明确引用要设置状态的UI控件。这种控制方式繁琐且耦合度较高。本发明中所描述的状态绑定技术可以为UI对象状态控制提供了一种简单的解决方案。
在本发明中,状态绑定机制涉及的对象包括状态管理器、状态实例、状态组、状态控制项、状态值。以订单为示例,状态管理对象层次结构如图7所示。
图7是根据本发明实施例的状态管理器的层次结构的示意图。在图7中,具体定义如下:
状态管理器管理状态的集合,并且该集合中有一个状态为当前状态,状态管理器提供切换状态的方法以便程序可以从一个状态切换到另一个状态;
每个状态中可包含多个状态组,状态组是具有相同特性的状态控制项的集合;以及
每个状态控制项对应一个数据项或操作,状态控制项的状态值表示该数据项是否可见、是否可更改,或者表示操作是否可被执行。
因此,在实现状态管理器的基础上,通过绑定,在UI对象和状态管理器之间建立关联。状态管理器切换当前状态后,绑定机制通知UI对象状态已更改,UI对象自动获取当前状态值,然后刷新界面显示。
从而,业务逻辑模块可控制状态管理器,决定在什么情况下切换到什么状态,UI对象状态绑定到状态管理器。
图8是根据本发明实施例的状态绑定处理的原理示意图。如图8所示,通过状态绑定,在业务数据状态改变时,业务逻辑模块只负责同步修改状态管理器中的状态值,状态绑定机制自动处理UI对象的状态刷新;业务逻辑代码只需要和状态管理器交互,而不需要直接去控制UI对象的状态,从而在状态控制层面实现了UI和业务逻辑的分离。
接下来,行为绑定是为UI对象的用户事件定义响应操作。通过脚本化UI事件处理,把UI对象的事件响应定义为可动态解析的脚本,而不是传统形式的事件注册处理机制,使得业务逻辑模块不需要为响应UI事件而必须引用UI对象并处理UI对象的事件消息,从而在行为层解除UI和业务逻辑模块间的依赖关系。
在业务逻辑模块中,通常包含对业务数据的操作,这些操作反映在UI界面上,通常是一个命令按钮或菜单项。在常用的事件机制中,命令按钮或菜单项有一个命令执行事件,业务逻辑代码会注册事件的处理器并在接收到事件消息后做出回应。因为注册事件处理器需要明确的对象引用,不管在设计时还是运行时,UI模块和业务逻辑模块都会因事件处理而产生依赖。
具体地,行为绑定技术包含以下几个关键的因素:
行为对象Action:对一个可执行操作的抽象描述(例如,订单有撤消、发货等行为,每一个行为即为一个Action);
Action提供者:实现行为逻辑的具体模块(例如,在订单功能中,一般业务逻辑代码中会实现一些函数对应撤消或发货操作,这些代码在应用程序中的对应模块即是Action的提供者);
Action调用和返回值:每个Action都需要一个代码中可调用的函数或过程作为Action的执行体,调用结束后在需要时返回结果(例如,在订单功能代码中,撤消操作对应函数CancelOrder,函数返回一个Boolean值表示订单是否被成功撤消);以及
Action触发器:触发Action的因素,一般是UI对象的事件消息(例如,在UI界面中的“撤消”按钮会触发“撤消订单”的Action)。
在具备以上因素后,在UI元数据中使用脚本化语言描述这些内容,在运行时动态解析脚本定位Action各因素,即可实现动态行为逻辑。
脚本化行为描述是指把为一个UI控件事件指定一个用字符串表示的Action,字符串中定义了如何去访问Action提供者、如何调用Action执行体,如何处理Action返回值等。
脚本中可以使用预定义的环境变量,环境变量在运行时动态解析为具体的对象实例,常用的环境变量如下表所示:
$model | 表示UI对象当前绑定逻辑模型对象。 |
$models | 表示逻辑模型对象集合,可按索引从集合中引用。如$models[2]。 |
$datacontext | 表示UI对象当前绑定的数据上下文对象。 |
$element | 表示行为对象的所有者,即引发行为的控件。 |
$event | 触发行为的事件参数。 |
$retvalue | 行为调用返回的结果。 |
脚本使用访问路径表示,在路径中可以支持任意级数的对象属性和方法访问路径,如:
属性访问路径$model.PropertyName.Collection[0].PropertyName;
方法访问路径$model.PropertyName.Collection[0].MethodName(Parameters)。
在运行时创建UI对象时,行为绑定机制会根据在设计时定义的行为属性参数,为UI控件的事件消息注册处理器。当控件事件发生时,再解析行为脚本内容,定位行为提供者和执行体,按照脚本中定义的行为访问路径,逐级解析,直到调用到具体的行为逻辑,并返回调用结果。例如,UI控件EditWindow定义了事件触发的Action,行为脚本为“$event.Cancel=$models[1].CellEditValidation(CellInfo,NewValue)”,事件名为CellChanging,那么在创建EditWindow时,行为绑定处理器会注册EditWindow的CellChanging事件;在CellChanging事件发生后,行为绑定处理器会解析脚本内容,定位到$models[1]对应的模型对象,并以CellChanging的事件参数中的单元格信息、编辑数值作为参数,调用其方法CellEditValidation,并将返回的验证结果设置到事件参数中以表示本次编辑是否通过了数据验证。
行为绑定技术通过设计时脚本化描述行为,使设计时不需要为UI事件指定行为逻辑代码,避免了使用代码隐藏来关联UI元数据文件和代码文件,使用UI模块和逻辑处理模块在设计和编译过程中都相互独立,没有任何依赖。同时,在运行时,注册和处理UI控件事件的对象由业务逻辑代码转移为行为绑定处理器,业务逻辑模块不需要再关注UI事件和用户响应,只需要关注对业务数据的逻辑操作,和UI对象之间已没有了直接依赖关系。
如图9和图10,分别示出了由于采用事件处理而使得UI与业务逻辑难以分离以及由于使用行为绑定而使UI与业务逻辑没有了直接依赖关系。
最后,在上述的几种绑定技术中,UI对象和业务对象之间的依赖关系被一步步解除,但在运行时,UI对象的运行依然需要业务逻辑的支持,否则单独的UI将失去意义。逻辑模型就是在UI对象和业务逻辑模型间建立关联,但这种关联不是双方之间明确的直接依赖,而是在绑定机制的支持下,通过特定的通道间接的产生关联,以使UI和业务逻辑保持一致。通过逻辑模型绑定在UI和业务逻辑间建立的关联是间接的,动态的,并且没有强制依赖的耦合关系,随时可被拆除或替换。
逻辑模型绑定是对数据绑定、状态绑定、行为绑定在综合层面的统一管理机制。其中,逻辑模型是指为UI对象指定一个提供数据源、状态管理器、行为集合等绑定源提供者;绑定机制则在逻辑模型和UI间建立通道,为数据绑定、状态绑定、行为绑定提供支持,同时绑定的特性使运行时可以无障碍的替换逻辑模型或切换UI视图。
逻辑模型绑定技术具有以下细节:
业务逻辑模块提供业务数据、状态管理器、行为集合等访问接口,充当逻辑模型角色;
设计时,可以在UI元数据中以声明的方式指定逻辑模型的类型以及所在的程序组件,其他在数据绑定、状态绑定、行为绑定声明中不需要指定绑定源(如图11(a)所示);
运行时创建UI对象时,逻辑模型绑定根据声明自动创建逻辑模型对象实例(如图11(b)所示);以及
逻辑模型可在运行时任意时间指定为其他对象,切换到其他对象时,逻辑绑定机制同步处理数据绑定、状态绑定、行为绑定,使用这些具体的绑定指向正确的绑定源并通知UI刷新。
在XAML格式UI元数据中,通过逻辑模型类型注册为UI对象声明逻辑模型。当UI对象被创建时,逻辑模型绑定机制通解析声明,加载程序集,创建逻辑模型的实例作为UI对象的逻辑模型,并且自动设置所有数据绑定、状态绑定、行为绑定的绑定源为该逻辑模型对象。
因此,本发明使用数据绑定、状态绑定、行为绑定技术在设计时和运行时都拆分了UI模块和业务逻辑模块之间的依赖耦合关系,而通过逻辑模型绑定技术,使互相独立的UI模块和业务逻辑可以被动态配置和关联。实现了分离界面表现和业务逻辑的目的。
综上所述,本发明中所描述的界面表现和业务逻辑的分离方案,在设计时和运行时都带来了较大的灵活性和效率改进,具体优点如下所述。
首先,在开发设计阶段,UI设计人员和业务编程人员可并行展开界面和代码开发,并不会互相影响,只要遵照相同的接口规约,在集成时UI和逻辑代码模块可顺利集成而不需任何改动。这种开发模式对比当前的UI设计和逻辑编程模式,真正实现了并行开发。
其次,在运行时,传统的技术下,UI对象和业务逻辑模块在运行期耦合在一个对象中,通常一个窗口或页面对象要同时负责界面对象功能模块的业务逻辑,这使得动态界面视图或动态业务逻辑难以实现。在使用本文描述的分离技术后,运行期间,界面和业务逻辑由两个不同的对象提供,通过逻辑模型绑定关联起来,UI对象如窗口或页面只负责呈现界面响应用户操作,对应的业务逻辑等通过绑定自动与逻辑模型匹配,这样在运行时通过切换UI对象或逻辑模型,可以轻松进行视图切换和动态改变业务逻辑。
另外,在编译和部署方面,常规的处理技术中UI元数据需要作为资源编译到程序集内部,编译和逻辑都有局限性;使用分离技术后,只有包含业务逻辑的代码文件需要编译,UI元数据可以按照任意方式部署在程序可访问的位置,对UI的改变不需要重新编译程序代码。结合压缩、缓存技术,可以提高部署的灵活性和效率。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种UI表现和业务逻辑分离方法,用于拆分UI模块和业务数据对象之间的依赖耦合关系,并且使相互独立的UI模块和业务数据对象能够被动态配置和关联,其特征在于,包括以下步骤:
步骤一,通过数据绑定使UI对象与所述业务数据对象相互关联,从而实现所述UI对象与所述业务数据对象在数据层面的分离,其中,使用所述数据绑定,在所述UI对象与所述业务数据对象之间建立双向通知和更新的关联通道,从而所述UI对象与所述业务数据对象中的任一方发生更改都通过所述数据绑定而被反映到另一方,而无需业务逻辑代码的参与;
步骤二,通过状态绑定使所述UI对象的状态与所述业务数据对象的状态相关联,从而实现所述UI对象与所述业务数据对象在状态控制层面的分离;
步骤三,通过行为绑定使所述UI对象的行为与所述业务数据对象的行为相关联,从而实现所述UI对象与所述业务数据对象在行为层面的分离;以及
步骤四,通过逻辑模型绑定来统一管理所述数据绑定、状态绑定和行为绑定,从而实现所述UI模块与所述业务数据对象之间的动态、间接的关联。
2.根据权利要求1所述的UI表现和业务逻辑分离方法,其特征在于,在所述步骤一中,
所述UI对象的UI元数据在初始布局过程中被指定绑定源和绑定路径,
在所述UI元数据被加载并创建为所述UI对象时,根据所述绑定源和绑定路径来自动获取所述UI元数据,并且
在所述UI对象与所述业务数据对象中的任一方发生更改时,同步更新所述UI元数据的绑定源。
3.根据权利要求1所述的UI表现和业务逻辑分离方法,其特征在于,在所述步骤二中,
在所述UI对象与所述业务数据对象之间经由状态管理器来建立关联,并且
当所述业务数据对象的状态改变时,所述业务数据对象可控地同步修改所述状态管理器的状态值,并通过所述状态绑定自动刷新所述UI对象的状态。
4.根据权利要求1所述的UI表现和业务逻辑分离方法,其特征在于,在所述步骤三中,
在设计时,脚本化描述所述UI对象与所述业务数据对象的行为而无需为所述UI对象的事件指定行为逻辑代码,从而使所述UI对象与所述业务数据对象在设计过程中不存在相互依赖;
在运行时,所述业务数据对象与所述UI对象的事件以及用户的响应无关,而仅与对所述业务数据对象的业务数据的逻辑操作相关。
5.根据权利要求1所述的UI表现和业务逻辑分离方法,其特征在于,在所述步骤四中,
通过逻辑模型为所述UI对象指定所述数据绑定、状态绑定和行为绑定的提供者,并且
通过逻辑模型绑定在所述UI对象与所述业务数据对象之间建立通道,为所述数据绑定、状态绑定和行为绑定提供支持。
6.一种UI表现和业务逻辑分离系统,用于拆分UI模块和业务数据对象之间的依赖耦合关系,并且使相互独立的UI模块和业务数据对象能够被动态配置和关联,其特征在于,包括:
数据绑定单元,用于通过数据绑定使UI对象与所述业务数据对象相互关联,从而实现所述UI对象与所述业务数据对象在数据层面的分离,其中,在所述UI对象与所述业务数据对象之间建立双向通知和更新的关联通道,从而所述UI对象与所述业务数据对象中的任一方发生更改都通过所述数据绑定而被反映到另一方,而无需业务逻辑代码的参与;
状态绑定单元,用于通过状态绑定使所述UI对象的状态与所述业务数据对象的状态相关联,从而实现所述UI对象与所述业务数据对象在状态控制层面的分离;
行为绑定单元,用于通过行为绑定使所述UI对象的行为与所述业务数据对象的行为相关联,从而实现所述UI对象与所述业务数据对象在行为层面的分离;以及
逻辑模型绑定单元,用于通过逻辑模型绑定统一管理所述数据绑定、状态绑定和行为绑定,从而实现所述UI模块与所述业务数据对象之间的动态、间接的关联。
7.根据权利要求6所述的UI表现和业务逻辑分离系统,其特征在于,在所述数据绑定单元中,所述UI对象的UI元数据在初始布局过程中被指定绑定源和绑定路径,在所述UI元数据被加载并创建为所述UI对象时,根据所述绑定源和绑定路径来自动获取所述UI元数据,并且在所述UI对象与所述业务数据对象中的任一方发生更改时,同步更新所述UI元数据的绑定源。
8.根据权利要求6所述的UI表现和业务逻辑分离系统,其特征在于,在所述状态绑定单元中,在所述UI对象与所述业务数据对象之间经由状态管理器来建立关联,并且当所述业务数据对象的状态改变时,所述业务数据对象可控地同步修改所述状态管理器的状态值,并通过所述状态绑定自动刷新所述UI对象的状态。
9.根据权利要求6所述的UI表现和业务逻辑分离系统,其特征在于,在所述行为绑定单元中,在设计时,脚本化描述所述UI对象与所述业务数据对象的行为而无需为所述UI对象的事件指定行为逻辑代码,从而使所述UI对象与所述业务数据对象在设计过程中不存在相互依赖;在所述状态绑定单元中,在运行时,所述业务数据对象与所述UI对象的事件以及用户的响应无关,而仅与对所述业务数据对象的业务数据的逻辑操作相关;在所述逻辑模型绑定单元中,通过逻辑模型为所述UI对象指定所述数据绑定、状态绑定和行为绑定的提供者,并且在所述UI对象与所述业务数据对象之间建立通道,为所述数据绑定、状态绑定和行为绑定提供支持。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010199861 CN101872305B (zh) | 2010-06-08 | 2010-06-08 | Ui表现和业务逻辑分离方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010199861 CN101872305B (zh) | 2010-06-08 | 2010-06-08 | Ui表现和业务逻辑分离方法和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101872305A CN101872305A (zh) | 2010-10-27 |
CN101872305B true CN101872305B (zh) | 2013-01-09 |
Family
ID=42997179
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010199861 Active CN101872305B (zh) | 2010-06-08 | 2010-06-08 | Ui表现和业务逻辑分离方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101872305B (zh) |
Families Citing this family (31)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103034478B (zh) * | 2011-09-29 | 2015-11-18 | 北京神州泰岳软件股份有限公司 | 一种im系统的独立业务线程模型实现方法 |
CN103513966A (zh) * | 2012-06-15 | 2014-01-15 | 北京力美科技有限公司 | 基于组件的php开发框架 |
US20140007004A1 (en) * | 2012-06-29 | 2014-01-02 | Nokia Corporation | Method and apparatus for task chaining |
CN103019695B (zh) * | 2012-11-22 | 2016-07-06 | 用友网络科技股份有限公司 | 数据对象与状态控制逻辑分离系统和方法 |
CN103268244B (zh) * | 2013-06-06 | 2017-12-26 | 北京奇虎科技有限公司 | 加载文件的方法及装置 |
CN104717268A (zh) * | 2013-12-16 | 2015-06-17 | 珠海世纪鼎利通信科技股份有限公司 | 一种利用面向对象技术实现界面配置开发方法及系统 |
CN104484169B (zh) * | 2014-12-09 | 2017-10-31 | 成都视达科信息技术有限公司 | 一种Android软件用户界面生成方法、系统及应用系统 |
US10084743B2 (en) * | 2015-04-15 | 2018-09-25 | General Electric Company | Methods and systems for adaptive and contextual collaboration in a network |
CN104834533B (zh) * | 2015-06-05 | 2018-12-14 | 东信和平科技股份有限公司 | 一种pc机安装程序的建立方法及装置 |
CN105160042A (zh) * | 2015-10-21 | 2015-12-16 | 浪潮(北京)电子信息产业有限公司 | 一种保持用户视图和数据模型内数据一致的方法和装置 |
CN105260191B (zh) * | 2015-11-03 | 2018-08-14 | 中国电子科技集团公司第四十一研究所 | 一种基于配置的测试程序与操作员界面数据交互方法 |
CN106873980A (zh) * | 2017-01-09 | 2017-06-20 | 深圳英飞拓科技股份有限公司 | 一种ui和业务逻辑分离方法和装置 |
CN107357605A (zh) * | 2017-06-01 | 2017-11-17 | 北京趣拿软件科技有限公司 | 运行安装文件的方法和装置 |
CN109284101B (zh) * | 2017-07-20 | 2022-04-05 | 菜鸟智能物流控股有限公司 | 一种对象属性的关联变更方法和装置 |
CN108121540A (zh) * | 2017-09-30 | 2018-06-05 | 苏州美房云客软件科技股份有限公司 | 存储装置、计算机设备、虚拟选房系统及其皮肤设定方法 |
CN108595262B (zh) * | 2018-03-29 | 2021-06-22 | 北京奇艺世纪科技有限公司 | 数据处理方法及装置 |
CN108628629B (zh) * | 2018-05-21 | 2022-02-22 | 网易(杭州)网络有限公司 | Ui更新方法、装置、设备及存储介质 |
CN110837367B (zh) * | 2018-08-16 | 2022-05-27 | 阿里巴巴集团控股有限公司 | 用户界面处理方法、装置及电子设备 |
CN109309859A (zh) * | 2018-09-30 | 2019-02-05 | 广州虎牙信息科技有限公司 | 直播间界面展示方法、架构及相关方法、装置及设备 |
CN109582310B (zh) * | 2018-11-30 | 2022-11-25 | 北京微播视界科技有限公司 | 数据处理方法、装置、电子设备及计算机可读存储介质 |
CN109582312B (zh) * | 2018-12-04 | 2021-09-21 | 艾体威尔电子技术(北京)有限公司 | 一种智能pos的ui层和逻辑层分离开发方法 |
CN110515621B (zh) * | 2019-08-26 | 2022-11-11 | 沈阳美行科技股份有限公司 | 一种清单列表功能属性的实现方法、装置及相关设备 |
CN110795071A (zh) * | 2019-10-11 | 2020-02-14 | 国电南京自动化股份有限公司 | 支持实时数据动态绑定的用户界面设计和代码分离方法 |
CN110727742A (zh) * | 2019-10-12 | 2020-01-24 | 深圳市康必达控制技术有限公司 | 一种可跨端部署的业务编排方法及系统 |
CN111258474B (zh) * | 2020-01-15 | 2021-07-06 | 广东三维家信息科技有限公司 | 基于gui的交互方法、装置及电子设备 |
CN111352611B (zh) * | 2020-03-04 | 2022-02-01 | 四川长虹电器股份有限公司 | 一种Android应用中实现UI与数据分离的方法 |
CN111930369B (zh) * | 2020-05-06 | 2024-04-16 | 许继集团有限公司 | 基于变量盒子的系统工具的设计方法 |
CN112084446A (zh) * | 2020-08-16 | 2020-12-15 | 中信百信银行股份有限公司 | 一种网页编辑方法、编辑器、电子设备和可读存储介质 |
CN113485680B (zh) * | 2021-06-30 | 2022-10-11 | 重庆长安汽车股份有限公司 | 一种基于车载系统的app组件化控制系统和方法 |
CN113778597B (zh) * | 2021-08-30 | 2023-12-29 | 惠州市德赛西威汽车电子股份有限公司 | 一种ui属性与程序逻辑关联的数据创建方法及系统 |
CN115374109B (zh) * | 2022-07-29 | 2023-09-01 | 华为技术有限公司 | 数据访问方法、装置、计算设备和系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101026481A (zh) * | 2006-02-21 | 2007-08-29 | 华为技术有限公司 | 一种集中用户安全管理方法及装置 |
CN101071373A (zh) * | 2007-03-30 | 2007-11-14 | 腾讯科技(深圳)有限公司 | 一种软件界面处理方法及装置 |
CN101087307A (zh) * | 2006-06-05 | 2007-12-12 | 国际商业机器公司 | 用于面向服务的协作的方法和系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080005560A1 (en) * | 2006-06-29 | 2008-01-03 | Microsoft Corporation | Independent Computation Environment and Provisioning of Computing Device Functionality |
-
2010
- 2010-06-08 CN CN 201010199861 patent/CN101872305B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101026481A (zh) * | 2006-02-21 | 2007-08-29 | 华为技术有限公司 | 一种集中用户安全管理方法及装置 |
CN101087307A (zh) * | 2006-06-05 | 2007-12-12 | 国际商业机器公司 | 用于面向服务的协作的方法和系统 |
CN101071373A (zh) * | 2007-03-30 | 2007-11-14 | 腾讯科技(深圳)有限公司 | 一种软件界面处理方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101872305A (zh) | 2010-10-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101872305B (zh) | Ui表现和业务逻辑分离方法和系统 | |
US9916136B2 (en) | Interface infrastructure for a continuation based runtime | |
CN110825362A (zh) | 低代码应用软件开发系统及方法 | |
Luckey et al. | Adapt cases: extending use cases for adaptive systems | |
CN100472438C (zh) | 一种视窗系统及其界面编辑方法 | |
CN101887370B (zh) | 创建系统用户界面的方法及装置 | |
US20030200533A1 (en) | Method and apparatus for creating software objects | |
EP2278469A2 (en) | Modularizing and aspectizing graphical user interface directed test scripts | |
US20050065953A1 (en) | System and method for changing defined elements in a previously compiled program using a description file | |
JP2006107481A (ja) | 設計時および実行時にワークフローを継ぎ目なくオーサリングし編集するためのフレームワーク | |
CN103164206A (zh) | 基于saas的软件定制系统 | |
CN111124636A (zh) | 一种流程编排引擎及其控制方法 | |
Cunha et al. | Development of a Graphical Tool to integrate the Prometheus AEOlus methodology and Jason Platform | |
Plasmeijer et al. | iTasks for a change: Type-safe run-time change in dynamically evolving workflows | |
CN106126213B (zh) | 一种基于IFML的Android开发建模方法 | |
CN113010168A (zh) | 一种基于场景树的用户界面生成方法 | |
Winckler et al. | Cascading dialog modeling with UsiXML | |
CN116909553A (zh) | 一种页面在线开发及本地编译运行系统 | |
CN101458628A (zh) | 一种程序版本管理方法 | |
CN106445539A (zh) | 一种基于IFML的Android开发建模方法 | |
KR20140084698A (ko) | 철강 공정용 소프트웨어 자동 테스트 시스템 | |
CN114253531A (zh) | 一种微服务发布系统 | |
CN111208976B (zh) | 一种软件系统架构自动生成的方法 | |
Cibrán et al. | A slice of mde with aop: Transforming high-level business rules to aspects | |
CN112817571B (zh) | 一种基于场景故事板的人机物融合应用建模方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C41 | Transfer of patent application or patent right or utility model | ||
TR01 | Transfer of patent right |
Effective date of registration: 20160127 Address after: 100094 Beijing City, North Road, Haidian District, No. 68, building 2, floor 2 Patentee after: You Pu Information Technology Co., Ltd of UFSOFT Address before: 100094 Beijing city Haidian District North Road No. 68, UFIDA Software Park Patentee before: UFIDA Software Co., Ltd. |