一种基于领域驱动设计的MVVM设计模型的制作方法

文档序号:12595551阅读:540来源:国知局
一种基于领域驱动设计的MVVM设计模型的制作方法与工艺

本发明涉及软件工程和软件体系结构领域,具体为前端图形用户界面程序的设计开发和领域驱动的软件设计开发,尤其是一种基于领域驱动设计的MVVM设计模型。



背景技术:

MVVM模型,是由微软开发人员提出的一种前端设计模式,旨在降低前端用户界面程序的开发复杂性。作为MVC经典模式的扩展、升级,MVVM实现了视图层(View)与数据模型层(Model)的完全解耦,可以使系统开发者和设计者完全独立、并行地工作。因为MVVM的诸多优点,目前非常多的主流用户界面程序开发平台都采用该架构,如Android、IOS,以及微信团队最近发布的微信小程序开发平台。

但在实际应用程序开发过程中,采用传统MVVM架构进行设计开发的程序不能很好地适应软件需求变更,也不能准确、完整地实现复杂性较高的业务需求。分析原因可知,MVVM设计模式的关注点是业务数据,属于数据驱动的开发模式,并没有从业务领域解决开发人员与领域专家之间的沟通问题。采用传统MVVM架构的软件开发,系统分析与系统设计是割裂的,会导致设计实现的系统不能与系统分析结果保持很好的一致性。

基于此,本发明实施例在用户界面程序MVVM架构中,加入领域驱动设计的思想,提出了基于领域驱动设计的MVVM设计模型。将软件分析与设计的关注点引导到业务上来,使用领域模型作为分析与设计的通用语言(Ubiquitous Language)。基于领域驱动设计的MVVM设计模型,以领域模型为核心,指导相关人员以领域驱动设计的思想进行系统分析、设计和开发工作,形成了统一的系统语言。

本发明实施例提供的基于领域驱动设计的MVVM设计模型,作为一种有效的设计模型,将从软件开始阶段即发挥指导作用,涉及软件分析、设计、开发的整个软件过程模型。在整个软件过程中,领域专家、设计人员、开发人员使用“基于领域驱动设计的MVVM设计模型”作为通用语言(Ubiquitous Language),使最终实现的软件真正能够表达和传递业务领域知识。



技术实现要素:

本发明提供了一种基于领域驱动设计的MVVM设计模型,有效解决了前端应用程序开发中软件复杂性越来越高的问题,有效降低了软件系统的复杂性,有效提高了软件系统的可维护性、可扩展性等质量属性,能够有效指导和规范软件开发人员,使其将重点放在系统核心业务领域。

本发明实施例具体实现的发明内容,概括起来为3部分:

(1)首次提出了在MVVM模型中采用领域驱动设计(DDD)的思想,并设计了一种全新的前端架构设计模型:基于领域驱动设计的MVVM设计模型(DDMVVM);

(2)以DDMVVM模型为指导,提出了基于领域驱动设计的MVVM模型设计方法;

(3)在具体的前端开发平台微信小程序平台下,开发并实现了基于领域驱动设计的MVVM模型开发框架:DDMVVM Framework。

1. 基于领域驱动设计的MVVM设计模型。

所述基于领域驱动设计的MVVM设计模型,是一种前端系统设计模型,在已有的MVVM模型基础上,引入了领域驱动设计的思想,实现了领域驱动设计的各核心要素。所述基于领域驱动设计的MVVM设计模型是一种分层架构模型,具体划分为四种层次,自上而下依次为:视图层(View Layer)、视图模型层(ViewModel Layer)、领域模型层(DomainModel Layer)和基础设施层(Infrastructure Layer)。

所述基于领域驱动设计的MVVM设计模型采用分层设计,实现了“关注点分离”的设计开发原则。每一层实现自己层次内特定功能,而且只依赖自己下一层次,不会出现跨层调用的混乱现象。

视图层由UI设计师负责实现,只包含视图组件、界面布局等用户界面代码,不包含任何业务逻辑代码。

视图模型层负责实现领域驱动设计中的“领域服务”元素,其中包含领域模型层中的领域对象接口,用以协同调用多个领域对象。所述视图模型层是视图层和领域模型层的中介,负责视图层和用户交互的逻辑代码实现,且含有领域模型层接口,负责调用领域模型层中具体业务逻辑。

领域模型层保存业务领域状态,并实现业务领域逻辑。具体保存的业务领域状态包括业务数据、业务操作和业务规则。

基础设施层提供业务系统底层技术支持,不涉及具体的业务功能。基础设施层为领域模型层提供领域对象持久化、领域对象创建、领域对象删除等技术支持。

2. 基于领域驱动设计的MVVM模型设计方法。

所述基于领域驱动设计的MVVM模型设计方法,具体是在两种层次上进行领域模型设计:高层次的战略设计和低层次的战术设计。在两种层次设计中,使用了领域驱动设计的6种设计模式:实体(Entity)、值对象(Value Object)、领域服务(Domain Service)、聚合(Aggregate)、工厂(Factory)和仓储(Repository)。

战略设计具体的设计方法为,在所对应的业务领域中,划分出子领域,识别出核心领域、支撑领域和通用领域,并实现限界上下文,每个限界上下文使用各自的通用语言。

战略设计是所述模型设计的最高层面设计。其中,限界上下文和子领域是一对一关系,在单个限界上下文中,团队成员使用一套通用语言作为设计、开发的沟通交流语言。

战术设计是指团队成员在划分出的子领域中具体设计实现基于领域驱动设计的MVVM设计模型。限界上下文为团队创建了一个模型设计边界,成员在边界内部为特定的业务子领域设计领域模型。

优选地,团队成员需要重点关注核心领域,因为核心领域包含了特定业务系统的核心业务知识,是最重要的子领域,是业务系统的核心竞争力。

3.基于领域驱动设计的MVVM模型开发框架。

所述基于领域驱动设计的MVVM模型开发框架,是在具体的开发平台(微信小程序开发平台)下,实现了支持所述基于领域驱动设计的MVVM设计模型的功能。通过所述框架,设计人员、开发人员可以更好地、更有效率地进行基于领域驱动设计的MVVM模型设计和开发工作。优选地,所述框架将开发代码、功能组件进行重构,使系统设计、开发的过程符合领域驱动设计规范

所述框架利用具体前端开发技术,分别在基于领域驱动设计的MVVM设计模型四种层次中实现了领域驱动设计的元素。

优选地,在所述基于领域驱动设计的MVVM模型开发框架的视图层,采用微信小程序标记语言(WXML)定义视图层界面布局,实现各视图组件。

优选地,开发了ActionJS功能组件,以实现视图模型层功能。

优选地,在领域模型层,引入Redux状态容器库,使用ReducerJS功能组件表示领域对象,提供可预测化的业务领域状态管理。ReducerJS实现了面向对象的设计方式,每个对象都包含了数据、操作和校验功能,即对应领域对象的业务数据、业务操作和业务规则。

优选地,在基础设施层,开发实现了InfrastructureJS功能组件。所述基础设施层使用StoreJS功能组件实现“工厂”和“仓储”领域驱动功能,以实现领域对象的管理,包括:领域对象创建、领域对象存储、领域对象删除、领域对象持久化。

与现有技术相比,本发明实施例的优势如下:本发明实施例所提出的基于领域驱动设计的MVVM设计模型,将会在软件需求分析、系统设计、开发及测试整个软件过程模型中发挥有效的指导作用。以该设计模型为指导,在具体的微信小程序开发过程中,以“基于领域驱动设计的MVVM设计模型”为通用语言,实现了领域人员、设计人员和开发人员的有效沟通。经过实际项目验证,提出的基于领域驱动设计的MVVM设计模型,能够完整准确地描述业务领域需求,并驱动系统设计开发工作,有效降低了软件系统的复杂性,有效提高了软件系统的可维护性、可扩展性等质量属性。

附图说明

图1:为本发明实施例提供的基于领域驱动设计的MVVM设计模型整体架构示意图;

图2:为本发明实施例提供的基于领域驱动设计的MVVM模型战术设计示意图;

图3:为本发明实施例提供的基于领域驱动设计的MVVM模型开发框架示意图。

具体实施方式

为了使本发明实施例的目的、技术方案及优势的阐述更加清楚、明白和无歧义,以下结合附图及实施例,对本发明实施例作进一步的详细说明。应当理解,此处所描述的具体实施例仅用于解释本发明,并不用于限定本发明。

本发明实施例基于领域驱动设计的思想,改进了现有的前端架构设计模型MVVM,实现了一种基于领域驱动设计的MVVM设计模型(DDMVVM),并且以该模型作为指导原则,提出了一种基于领域驱动设计的MVVM模型设计方法,并实现了对应该模型的一种基于领域驱动设计的MVVM模型开发框架(DDMVVM Framework)。

领域驱动设计使领域专家和开发者作为团队一起工作,团队的重心在于关注业务层面,通过建立一致的领域模型作为通用语言,以准确地表达、传递领域知识。

本发明实施例提供了一种基于领域驱动设计的MVVM设计模型,用以指导相关设计人员、开发人员在采用MVVM架构的系统的分析、设计、开发和测试过程中,以领域驱动设计的规范进行。

图1示出了本发明实施例提供的基于领域驱动设计的MVVM设计模型整体架构,详述如下:所述基于领域驱动设计的MVVM设计模型架构根据“关注点分离”原则,自上而下分为四层,分别为:视图层(View Layer)、视图模型层(ViewModel Layer)、领域模型层(DomainModel Layer)和基础设施层(Infrastructure Layer)。

在本发明的实施例中,视图层为系统最外层,负责与终端用户进行交互。所述视图层不包含任何业务逻辑代码,只包含视图组件、界面布局等用户界面逻辑,由UI设计师负责实现。

作为本发明的一个优选实施例,视图层基本构成组件为视图组件,分别对应用户界面场景。视图组件主要功能即为业务领域逻辑的展现,包括用户交互和业务数据展现。

在本发明的实施例中,视图模型层保存系统流转状态,保存视图层中的用户交互逻辑及中间系统状态,实现了视图层与领域模型层的完全解耦。视图模型层响应视图层中的用户操作,并调用领域模型层接口,将需要展现的业务数据以指定格式保存,提供给视图层。

所述视图模型层,使用“数据绑定”机制和“命令”机制,实现了视图层与领域模型层的完全解耦。

作为本发明的一个优选实施例,所述视图模型层具体实现了领域驱动设计中的“领域服务”元素,其中包含领域模型层中的领域对象接口,用以协同调用多个领域对象。

在本发明的实施例中,领域模型层是所述基于领域驱动设计的MVVM设计模型的核心部分,保存业务领域状态,包括业务数据、业务操作和业务规则。

所述领域模型层,主要部分为领域对象,领域对象不止包含了业务数据,而且包含了业务操作和数据校验等业务规则,是一种“充血模型”。

在本发明的实施例中,基础设施层为所述基于领域驱动设计的MVVM设计模型提供技术支持,包括领域对象持久化、领域对象创建和领域对象删除等操作。

作为本发明的一个优选实施例,所述基础设施层不包含任何具体业务相关的逻辑代码,有效实现了可复用性和可移植性。

领域模型是关于某个特定业务领域的软件模型。通常,领域模型通过对象模型来实现,这些对象同时包含了数据和行为,并且表达了准确的业务含义。

本发明实施例还提供了一种基于领域驱动设计的MVVM模型设计方法,用以规范前端设计严格按照领域驱动设计的思想建立领域模型,即基于领域驱动设计的MVVM设计模型。

图2示出了本发明实施例提供的基于领域驱动设计的MVVM模型战术设计方法,详述如下:所述基于领域驱动设计的MVVM模型设计方法在两种层面上进行设计,分别为战略设计和战术设计。

在本发明的实施例中,战略设计是所述基于领域驱动设计的MVVM模型设计的最高层面设计。在所对应的业务领域中,划分出子领域,识别出核心领域、支撑领域和通用领域。并实现限界上下文,每个限界上下文使用各自的通用语言。

作为本发明的一个优选实施例,限界上下文和子领域是一对一关系,在单个限界上下文中,团队成员使用一套通用语言作为设计、开发的沟通交流语言。

在本发明的实施例中,当团队涉及不同限界上下文的沟通时,使用上下文映射图(Context Map)来表示两个或多个限界上下文之间的映射关系。

在本发明的实施例中,战术设计即为成员在模型设计边界内部为特定的业务子领域设计领域驱动的MVVM模型。限界上下文为团队创建了一个模型设计边界。

作为本发明的一个优选实施例,团队成员需要重点关注核心领域,因为核心领域包含了特定业务系统的核心业务知识,是最重要的子领域,是业务系统的核心竞争力。

本发明实施例还提供了一种基于领域驱动设计的MVVM模型开发框架。所述基于领域驱动设计的MVVM模型开发框架在微信小程序开发平台下实现所述基于领域驱动设计的MVVM设计模型各层。将开发代码、功能组件进行重构,使系统设计、开发的过程符合领域驱动设计规范。

图3示出了本发明实施例提供的基于领域驱动设计的MVVM模型开发框架,详述如下:通过所述基于领域驱动设计的MVVM模型开发框架,设计人员、开发人员可以更好、更有效率地进行基于领域驱动设计的MVVM模型设计和开发工作。优选地,所述框架将开发代码、功能组件进行重构,使系统设计、开发的过程符合领域驱动设计规范。

所述基于领域驱动设计的MVVM模型开发框架利用具体前端开发技术,分别在基于领域驱动设计的MVVM设计模型四种层次中实现了领域驱动设计的元素:

(1)视图层,使用微信小程序标记语言(WXML)定义视图层界面布局、实现各视图组件;

(2)视图模型层,开发了ActionJS功能组件,实现视图模型层功能;

(3)领域模型层,引入Redux状态容器库,提供可预测化的业务领域状态管理;

(4)基础设施层,开发了InfrastructureJS功能组件,实现了基础设施层功能。

在本发明的实施例中,所述领域模型层使用ReducerJS功能组件表示领域对象。ReducerJS以面向对象设计方式,每个对象都包含了数据、操作和校验功能,三种功能分别对应领域对象的业务数据、业务操作和业务规则。

在本发明的实施例中,所述基础设施层使用StoreJS功能组件实现“工厂”和“仓储”领域驱动功能,以实现领域对象的管理,包括:领域对象创建、领域对象存储、领域对象删除、领域对象持久化。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1