CN116627393B - 一种基于关系的聚合建模方法、设备及介质 - Google Patents
一种基于关系的聚合建模方法、设备及介质 Download PDFInfo
- Publication number
- CN116627393B CN116627393B CN202310919289.6A CN202310919289A CN116627393B CN 116627393 B CN116627393 B CN 116627393B CN 202310919289 A CN202310919289 A CN 202310919289A CN 116627393 B CN116627393 B CN 116627393B
- Authority
- CN
- China
- Prior art keywords
- aggregation
- relationship
- relation
- root
- display
- 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
- 238000004220 aggregation Methods 0.000 title claims abstract description 388
- 230000002776 aggregation Effects 0.000 title claims abstract description 383
- 238000000034 method Methods 0.000 title claims abstract description 70
- 230000008569 process Effects 0.000 claims abstract description 19
- 238000003860 storage Methods 0.000 claims description 20
- 238000012545 processing Methods 0.000 claims description 10
- 238000013461 design Methods 0.000 description 10
- 238000004590 computer program Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 6
- 238000004458 analytical method Methods 0.000 description 5
- 230000009286 beneficial effect Effects 0.000 description 5
- 230000018109 developmental process Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 230000004075 alteration Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000009472 formulation Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例公开了一种基于关系的聚合建模方法、设备及介质,涉及计算机的技术领域,方法包括:获取用例或者领域事件,基于用例或者领域事件提取出候选聚合对象,并从候选聚合对象中确定聚合根;基于用例的流程或者领域事件,识别聚合根与各聚合对象之间的关联关系,关联关系包括一对一关系和一对多关系;比较聚合对象的生命周期和聚合根的生命周期,识别关联关系在聚合模型内的聚合关系类型,聚合关系类型包括显示关系和隐含关系;将显示关系所依赖的候选聚合对象确定为聚合模型内的聚合对象,并将引用聚合根的显示关系和隐含关系作为聚合模型内的关系;根据聚合根、聚合对象和聚合关系类型,确定聚合模型的边界。
Description
技术领域
本说明书涉及计算机的技术领域,尤其涉及一种基于关系的聚合建模方法、设备及介质。
背景技术
DDD(Domain-driven design)领域驱动设计是一种通过将实现连接到持续进化的模型来满足复杂需求的软件开发方法。领域模型是对业务模型的抽象,DDD是把业务模型翻译成系统架构设计的一种方式。
在业务开发过程中,需要领域工程师为业务进行建模,将真实业务概念映射到面向对象的代码设计,将业务概念与实体和值对象进行映射。因此如何识别业务实体,处理业务实体边界,处理实体与实体之间的关系,实体与值对象之间的关系成为领域建模是否成功的关键。
聚合是领域对象的显式分组,旨在支持领域模型的行为和不变性,同时充当一致性和事务性边界。我们,通过定义对象间的隶属关系和边界来实现领域模型的内聚,把一些关联性极强、生命周期一致的实体、值对象放到一个聚合里。聚合根是聚合的根实体,最具代表性的实体,可以通过聚合根来访问聚合。
由于DDD将软件系统分为多个领域,每个领域都有自己的模型和规则,这种分层结构使得软件系统更易于维护和扩展。当业务需求发生变化时,只需要修改相应的领域模型和规则,而不需要修改整个系统。但是,目前聚合建模的方法提到内部的实体与值对象之间是以上述属性(定义)的方式展示,属性的概念能够表达隶属关系,但依旧比较模糊,不能进一步清晰地表达怎样的隶属关系以及聚合边界是什么,因此无法准确地进行维护、拓展和修改。
发明内容
本说明书一个或多个实施例提供了一种基于关系的聚合建模方法、设备及介质,用于解决如下技术问题:目前聚合建模的方法不能进一步清晰地表达怎样的隶属关系以及聚合边界是什么,因此无法准确地进行维护、拓展和修改。。
本说明书一个或多个实施例采用下述技术方案:
获取用例或者领域事件,基于所述用例或者所述领域事件提取出候选聚合对象,并从候选聚合对象中确定聚合根;基于所述用例的流程或者所述领域事件,识别所述聚合根与各候选聚合对象之间的关联关系,所述关联关系包括一对一关系和一对多关系;
比较所述候选聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系和隐含关系;
将所述显示关系所依赖的候选聚合对象确定为所述聚合模型内的聚合对象,并将引用所述聚合根的显示关系和隐含关系作为所述聚合模型内的关系;
根据所述聚合根、所述聚合对象和所述聚合关系类型,确定所述聚合模型的边界。
进一步地,所述获取用例或者领域事件,基于所述用例或者所述领域事件提取出聚合对象,并从聚合对象中确定聚合根,包括:
获取用例或者领域事件,并从所述用例或者所述领域事件中提取出名词,作为候选聚合对象;
从所述候选聚合对象中确定值类型数据的值对象,将剩余的候选聚合对象确定为实体;
基于所述用例的流程或者所述领域事件,从所述实体中确定与其他各所述实体以及所述值对象均关联的实体,作为聚合根。
进一步地,比较所述聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系和隐含关系,包括:
若所述聚合对象不具有独立的生命周期,则将所述一对一关系确定为一对一值对象关系;
若所述聚合对象与所述聚合根具有相同的生命周期,则将所述关联关系确定为聚合内显示关系,所述显示关系包括一对一显示关系和一对多显示关系;
若所述聚合对象与所述聚合根不具有相同的生命周期,则将所述一对一关系确定为一对一聚合关系,将所述一对多关系确定为一对多隐含关系。
进一步地,在素所述比较所述聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型之后,还包括:
对所述一对一显示关系进行建模,得到一对一显示关系实体;
将所述一对一显示关系实体划分入所述聚合模型中;
对所述一对多显示关系进行建模,得到一对多显示关系实体;
将所述一对多显示关系实体划分入所述聚合模型中。
进一步地,还包括:
以所述聚合根为根节点,以所述候选聚合对象为子节点,根据所述候选聚合对象与所述聚合根之间的所述聚合关系类型,建立树形聚合模型。
进一步地,在所述建立树形聚合模型之后,还包括:
用所述聚合关系类型代替所述候选聚合对象,生成聚合模型。
进一步地,还包括:
采用父节点表征聚合根,采用树形结构的节点类型表征所述聚合关系类型,生成树形存储结构;
采用所述树形存储结构的节点数据表征当前关系节点所包含的信息,并将所述节点数据作为元数据。
进一步地,还包括:
采用叶子节点处理器和非叶子节点的处理器,来处理树形存储结构的关系各个节点的元数据;
采用叶子节点处理器的基类,获取当前节点属性的反射信息和特性的注解信息来处理叶子节点;
采用非叶子节点处理器的基类,在遍历子节点前触发先动方法,在在子节点遍历后触发后动方法;
采用叶子节点处理器分别处理一对一值对象关系节点、一对一聚合关系节点和一对多隐含关系节点;
采用子节点继承分别处理聚合根节点、聚合根子类节点、一对一显示关系节点和一对多显示关系节点。
本说明书一个或多个实施例提供一种基于关系的聚合建模方法,所述方法包括:
本说明书一个或多个实施例提供一种基于关系的聚合建模设备,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取用例或者领域事件,基于所述用例或者所述领域事件提取出候选聚合对象,并从候选聚合对象中确定聚合根;基于所述用例的流程或者所述领域事件,识别所述聚合根与各候选聚合对象之间的关联关系,所述关联关系包括一对一关系和一对多关系;
比较所述聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系和隐含关系;
将所述显示关系所依赖的候选聚合对象确定为所述聚合模型内的聚合对象,并将引用所述聚合根的显示关系和隐含关系作为所述聚合模型内的关系;
根据所述聚合根、所述聚合对象和所述聚合关系类型,确定所述聚合模型的边界。
本说明书一个或多个实施例提供的一种非易失性计算机存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为:
获取用例或者领域事件,基于所述用例或者所述领域事件提取出候选聚合对象,并从候选聚合对象中确定聚合根;基于所述用例的流程或者所述领域事件,识别所述聚合根与各候选聚合对象之间的关联关系,所述关联关系包括一对一关系和一对多关系;
比较所述聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系和隐含关系;
将所述显示关系所依赖的候选聚合对象确定为所述聚合模型内的聚合对象,并将引用所述聚合根的显示关系和隐含关系作为所述聚合模型内的关系;
根据所述聚合根、所述聚合对象和所述聚合关系类型,确定所述聚合模型的边界。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:本发明通过分析候选聚合对象和聚合根的生命周期,识别出聚合根和各候选聚合对象的聚合关系,根据聚合关系确定聚合的边界也就出来了:所有类型的关系都在边界内,但隐含关系所依赖的实体都在边界外,也就是通过当前聚合无法修改隐含关系所依赖的实体内部,而显示关系依赖的实体就在边界内,可以通过聚合根修改。
附图说明
为了更清楚地说明本说明书实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本说明书实施例提供的一种基于关系的聚合建模方法的流程示意图;
图2为本说明书实施例提供的一种基于关系的聚合建模设备的结构示意图;
图3为本说明书实施例提供的一种布置作业聚合模型示意图;
图4为本说明书实施例提供的一种聚合关系元数据示意图;
图5为本说明书实施例提供的一种关系节点处理器组件示意图;
图6为本说明书实施例提供的一种聚合的树形示意图;
图7为本说明书实施例提供的一种聚合关系的树形示意图。
具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
本说明书实施例提供一种基于关系的聚合建模方法,需要说明的是,本说明书实施例中的执行主体可以是服务器,也可以是任意一种具备数据处理能力的设备。
在本发明的技术方案中,DDD(Domain-driven design)领域驱动设计是一种通过将实现连接到持续进化的模型来满足复杂需求的软件开发方法。领域模型是对业务模型的抽象,DDD是把业务模型翻译成系统架构设计的一种方式。
方案1为本说明书实施例提供的一种基于关系的聚合建模方法的流程示意图。
如方案1所示,方法主要包括如下步骤:
步骤S101,获取用例或者领域事件,基于所述用例或者所述领域事件提取出候选聚合对象,并从候选聚合对象中确定聚合根。
在一个实施例中,所述获取用例或者领域事件,基于所述用例或者所述领域事件提取出聚合对象,并从聚合对象中确定聚合根,包括如下步骤:
获取用例或者领域事件,并从所述用例或者所述领域事件中提取出名词,作为候选聚合对象;
从所述候选聚合对象中确定值类型数据的值对象,将剩余的候选聚合对象确定为实体;
基于所述用例的流程或者所述领域事件,从所述实体中确定与其他各所述实体以及所述值对象均关联的实体,作为聚合根。
其中,用例指的是是一个UML(统一建模语言)中非常重要的概念,在使用UML的整个软件开发过程中,用例处于一个中心地位。用例是对一组动作序列的抽象描述,系统执行这些动作序列,产生相应的结果。
为了方便描述,将本发明方案应用于布置作业的聚合建模中进行详细描述,其中布置作业用例如下表所示:
其中,聚合内的值对象是由字符串、整型、长整型、日期等与编程语言相同概念的值类型。
在布置作业的聚合建模实施例中,作业标题是字符串值类型,截止日期是日期的值类型,备注是字符串值类型,分数是decimal类型的值类型。教师、班级、学生、习题、作业都是业务概念,是单独独立的实体。如下表所示:
在布置作业用例中,主要是作业业务的使用场景,通过对用例流程的分析,发现所有的实体和值对象都与作业这个实体产生了联系,需要通过作业访问各个实体和值对象。因此本用例最主要的聚合为作业。作业这个实体则作为作业聚合的聚合根。设计类HTE为作业聚合的聚合根,HTE继承了AggregationRoot(聚合根)。步骤S102,基于所述用例的流程或者所述领域事件,识别所述聚合根与各候选聚合对象之间的关联关系,所述关联关系包括一对一关系和一对多关系。
以对布置作业进行聚合建模为例,分析布置作业用例中各实体和值对象之间的关联关系。
每份作业包含一个作业标题,一个截止日期,一个备注,因此作业和它们是一对一关系。
教师可以布置多份作业,但从作业的角度来看,每份作业都由一名教师布置,故作业与教师之间是一对一关系。
从用例的基本流程的第4步和第5步中分析教师是通过班级来选择学生,因此班级是一个查询筛选条件,作业与班级之间没有关联关系。一份作业布置给多名学生,故作业与学生之间是一对多关系。
从用例的基本流程的第2步和第3步中分析教师布置一份作业需要选择多道习题,并且为每道题设置分数。故作业与习题和分数形成一对多关系。
识别出来的各候选聚合对象之间的关联关系如下表所示:
步骤S103,比较所述候选聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系和隐含关系。
其中,比较所述聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系和隐含关系,包括如下步骤:
若所述聚合对象不具有独立的生命周期,则将所述一对一关系确定为一对一值对象关系;
若所述聚合对象与所述聚合根具有相同的生命周期,则将所述关联关系确定为聚合内显示关系,所述显示关系包括一对一显示关系和一对多显示关系;
若所述聚合对象与所述聚合根不具有相同的生命周期,则将所述一对一关系确定为一对一聚合关系,将所述一对多关系确定为一对多隐含关系。
以布置作业聚合建模为例进行说明,标题、截止日期和备注这三个值对象不具备独立的生命周期,离开了作业就没有存在的意义,所以标题、截止日期和备注属于作业聚合的边界内。作业与标题、备注和截止日期为一对一关系,同时为值类型,符合一对一值类型关系的定义,故此作业与它们的关系为一对一值对象关系。
其中,备注作为富文本,占用存储高,且在条件查询中无需同作业标题和截止日期同时显示,同时与作业的关系并不十分紧密,因此可以将备注单独做垂直分割,有利于性能的提升。通过设计一个实体来承载备注,该实体与备注形成一对一值对象关系,称该实体为备注信息,备注信息类名为RemarkInfo,该类继承了ObjectsRelationShipForOneToOne,其生命周期同备注的生命周期,作业与备注信息符合一对一显示关系的定义,故作业与备注信息为一对一显示关系。
综上所述将作业聚合与各实体和值对象的关系梳理如下表:
步骤S104,将所述显示关系所依赖的候选聚合对象确定为所述聚合模型内的聚合对象,并将引用所述聚合根的显示关系和隐含关系作为所述聚合模型内的关系。
标题、截止日期和备注这三个值对象不具备独立的生命周期,离开了作业就没有存在的意义,所以标题、截止日期和备注属于作业聚合的边界内。作业与标题、备注和截止日期为一对一关系,同时为值类型,符合一对一值类型关系的定义,故此作业与它们的关系为一对一值对象关系。
进一步将备注拿出来分析,备注作为富文本,占用存储高,且在条件查询中无需同作业标题和截止日期同时显示,同时与作业的关系并不十分紧密,因此可以将备注单独做垂直分割,有利于性能的提升。通过设置一个实体来承载备注,该实体与备注形成一对一值对象关系,称该实体为备注信息,备注信息类名为RemarkInfo,该类继承了ObjectsRelationShipForOneToOne,其生命周期同备注的生命周期,作业与备注信息符合一对一显示关系的定义,故作业与备注信息为一对一显示关系。
作业、教师、学生、习题都具有独立的生命周期。
在作业与教师的关系中,作业不存在了教师还有独立存在的意义,所以教师实体不在作业聚合的边界内。一份作业可以由不同的教师来布置,作业可以被修改成依赖不同的教师,且每次只能依赖一名教师,但是修改作业时无法修改到教师的姓名等属于教师聚合的关系,因此作业与教师形成了一对一隐含的依赖关系,这种聚合间的依赖符合一对一聚合关系的定义,故作业与教师的关系为一对一聚合关系。
作业与学生的关系中,同样作业不存在了学生还会独立存在,所以学生实体不在作业聚合的边界内。一份作业会布置给多名学生,形成了一对多的关系。学生是另一聚合,这符合一对多隐含关系的定义,因此作业与学生是一对多隐含关系。
作业与习题和分数的关系中,需要先设计一个实体来整合习题和分数。把这个实体称之为包含的习题集,当作业不存在时,包含的习题集就没有存在的意义,包含的习题集属于作业聚合内,包含的习题集类名为IncludeExercises,该类继承了ObjectsRelationShipForOneToMulti,符合一对多显示关系的定义,故作业与包含的习题集是一对多显示关系。习题集里的习题还有独立存在的意义但是分数已经没有意义了,因为一份作业里的分数表达的是某道题在当前作业的分数,习题则作为独立的业务概念,可以单独存在。因此包含的习题集与习题是一对一聚合关系,与分数是一对一值对象关系。
步骤S105,根据所述聚合根、所述聚合对象和所述聚合关系类型,确定所述聚合模型的边界。
在一些实施例中,可以以树形结构来描述聚合模型,如图6所示,聚合以聚合根为根节点也是访问聚合的入口,此为第1层。它包含了5个的子节点,4种节点类型:值对象、聚合、一对一实体和一对多实体,此为第2层。在第2层聚合根和对象之间形成了5种关系。聚合根和值对象形成一对一值对象关系,和另一个聚合形成一对一聚合关系,和一对一实体形成一对一显示关系,和一对多实体形成一对多显示关系,和多个另一个聚合形成一对多隐含关系。在第2层一对一的值对象关系,一对一聚合关系以及一对多隐含关系对应的节点都是叶子节点,一对一显示关系和一对多显示关系对应的节点不是叶子节点。第3层节点分别是值对象、聚合和一对多实体。第4层节点是第3层的一对多实体节点的子节点,分别是值对象和聚合。聚合根子类继承关系作为特殊的存在与聚合根在同一层。聚合根子类所包含的子节点及之间的关系与聚合根完全相同。
由于每一种关系的概念在聚合内是唯一,且每种关系所关联的节点类型唯一对应,故可以用关系代替节点类型,可以描述成第1层包含了5种关系。因此可以由图6得到图7。
综上所述,聚合的关系表示法将关系和对象的概念合并简化为具体的关系概念。通过关系分析就能完成对聚合的建模。通过对图7的分析,我们可以得到下面的聚合公式表示法:
公式:
条件1:
条件2(可选):
条件3(可选):
其中,公式中n表示第几层,Agg表示聚合是Aggregate的简写,AR表示聚合根是AggregateRoot的简写,SubAR表示聚合根子类SubAggregateRoot的简写,O2OV表示一对一值对象关系,O2OA表示一对一聚合关系,O2OS表示一对一显示关系,O2MS表示一对多显示关系,O2MH表示一对多隐含关系。
公式1表示了聚合由哪些元素组成。公式左边是聚合,公式右边表示至少由一个AR和O2OV组成,SubAR可选,且AR和SubAR属于第1层;O2OV和O2OA在第2层到第4层,其中O2OA可选;O2OS只在第2层,可选;O2MS和O2MH在第2层和第3层,都可选。且同时O2OV、O2OA、O2OS、O2MS和O2MH需要满足条件1和条件2。
条件1表示:第2层的O2OV、O2OA、O2OS、O2MS和O2MH属于聚合根或其子类。
条件2(可选)表示:第3层O2OV、O2OE、O2MS和O2MH属于其上一层的O2MS,且第4层只有O2OV和O2OA,属于上一层的O2MS。
条件3(可选)表示第3层的O2OV可以属于第2层的O2OS。
可以为布置作业的聚合进行建模,并按聚合的关系类型划分出作业聚合边界。如图3所示。
本发明的方案还可以应用于基于关系构建元数据,具体如下:
聚合内有了清晰的关系类型,就可以采用元数据技术来描述聚合的各个关系。根据图2的成果,关系通过树形结构来表达,因此设计TreeNode类如图4所示。具体说明TreeNode各属性的含义和作用。Parent(亲人、父母)属性指向自己可以形成树行结构;属性ID作为关系节点的唯一标识;NodeType表示各个关系的节点类型,包括了O2OV、O2OA、O2OS、O2MS、O2MH五种关系类型,也包含了聚合根和其子类:AR和SubAR;属性FirstChild表示第一个子节点;属性RightSibling表示节点右边的兄弟节点;属性LeftSibling表示左边的兄弟节点;属性IndexOfLevel表示同层的节点索引;属性Level表示第几层;属性Degree表示节点的度;属性IsRoot表示是否根节点;属性IsLeaf表示是否是叶子节点;属性HasChild表示是否有子节点;属性NodeData,主要描述了当前关系节点所包含的信息,包括所属聚合类型,当前节点的特性和属性信息,ColumnAttribute包含的是数据库表字段特性,HiddentRelationAttribute包含的是一对多隐含关系的信息,TableAttribute包含的是聚合根节点和聚合根子类节点对应的数据库表信息。
通过TreeNode、NodeType和NodeData可以将聚合关系以元数据的形式管理起来,在后续的系统开发时,元数据成为了系统认识聚合的方法,也就是为系统注入了业务知识。
本发明的方案还可以应用于基于关系元数据设计自动生成持久化代码机制,这个应用是基于聚合关系和元数据之上,通过元数据的处理自动生成仓储层代码来进行聚合持久化。
参考图5,关系节点处理器组件设计思路:设计叶子节点处理器(NodeProcessor)和非叶子节点的处理器(HasChildNodeProcessor),来处理树形结构的关系各个节点的元数据。
NodeProcessor是叶子节点处理器的基类,其中Action方法将获取当前节点属性的反射信息和特性的注解信息来处理叶子节点。
HasChildNodeProcessor是非叶子节点处理器的基类,其中ActionBefore方法在遍历子节点前触发和ActionAfter方法在子节点遍历后触发。
O2OVProcessor、O2OAProcessor和O2MHProcessor是叶子节点处理器继承NodeProcessor。分别处理一对一值对象关系节点、一对一聚合关系节点和一对多隐含关系节点。
ARProcessor、SubARProcessor、O2OSProcessor和O2MSProcessor都含有子节点继承HasChildNodeProcessor。分别处理聚合根节点、聚合根子类节点、一对一显示关系节点和一对多显示关系节点。
有了处理器组件后,可以为基础设施层开发具体的处理器,例如面向数据库可以根据不同的数据库,开发不同的处理器:Mysql仓储处理器、Mysql工厂处理器、Mysql自动生成表处理器、SqlServer仓储层处理器、SqlServer工厂处理器、SqlServer自动生成表处理器等。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:本发明通过分析候选聚合对象和聚合根的生命周期,识别出聚合根和各候选聚合对象的聚合关系,根据聚合关系确定聚合的边界也就出来了:所有类型的关系都在边界内,但隐含关系所依赖的实体都在边界外,也就是通过当前聚合无法修改隐含关系所依赖的实体内部,而显示关系依赖的实体就在边界内,可以通过聚合根修改。
本说明书实施例还提供一种动态添加多数据源的设备,如方案2所示,设备包括:至少一个处理器;以及,与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够:
获取用例或者领域事件,基于所述用例或者所述领域事件提取出候选聚合对象,并从候选聚合对象中确定聚合根;基于所述用例的流程或者所述领域事件,识别所述聚合根与各候选聚合对象之间的关联关系,所述关联关系包括一对一关系和一对多关系;
比较所述候选聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系和隐含关系;
将所述显示关系所依赖的候选聚合对象确定为所述聚合模型内的聚合对象,并将引用所述聚合根的显示关系和隐含关系作为所述聚合模型内的关系;
根据所述聚合根、所述聚合对象和所述聚合关系类型,确定所述聚合模型的边界。
本说明书实施例还提供一种非易失性计算机存储介质,存储有计算机可执行指令,所述计算机可执行指令设置为:
获取用例或者领域事件,基于所述用例或者所述领域事件提取出候选聚合对象,并从候选聚合对象中确定聚合根;基于所述用例的流程或者所述领域事件,识别所述聚合根与各候选聚合对象之间的关联关系,所述关联关系包括一对一关系和一对多关系;
比较所述候选聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系和隐含关系;
将所述显示关系所依赖的候选聚合对象确定为所述聚合模型内的聚合对象,并将引用所述聚合根的显示关系和隐含关系作为所述聚合模型内的关系;
根据所述聚合根、所述聚合对象和所述聚合关系类型,确定所述聚合模型的边界。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、设备、非易失性计算机存储介质实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本说明书实施例提供的设备和介质与方法是一一对应的,因此,设备和介质也具有与其对应的方法类似的有益技术效果,由于上面已经对方法的有益技术效果进行了详细说明,因此,这里不再赘述设备和介质的有益技术效果。
本领域内的技术人员应明白,本说明书的实施例可提供为方法、系统、或计算机程序产品。因此,本说明书可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本说明书可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程方案和/或方框方案来描述的。应理解可由计算机程序指令实现流程方案和/或方框方案中的每一流程和/或方框、以及流程方案和/或方框方案中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程方案一个流程或多个流程和/或方框方案一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程方案一个流程或多个流程和/或方框方案一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程方案一个流程或多个流程和/或方框方案一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器 (CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM) 和/或非易失性内存等形式,如只读存储器 (ROM) 或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器 (SRAM)、动态随机存取存储器 (DRAM)、其他类型的随机存取存储器 (RAM)、只读存储器 (ROM)、电可擦除可编程只读存储器 (EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘 (DVD) 或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体 (transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本说明书的一个或多个实施例而已,并不用于限制本说明书。对于本领域技术人员来说,本说明书的一个或多个实施例可以有各种更改和变化。凡在本说明书的一个或多个实施例的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书的权利要求范围之内。
Claims (9)
1.一种基于关系的聚合建模方法,其特征在于,所述方法包括:
获取用例或者领域事件,基于所述用例或者所述领域事件提取出候选聚合对象,并从所述候选聚合对象中确定聚合根;基于所述用例的流程或者所述领域事件,识别所述聚合根与各所述候选聚合对象之间的关联关系,所述关联关系包括一对一关系和一对多关系;
比较所述候选聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系、隐含关系和一对一值对象关系;
将所述显示关系和一对一值对象关系所依赖的候选聚合对象确定为所述聚合模型内的聚合对象,并将引用所述聚合根的显示关系和隐含关系作为所述聚合模型内的关系;
根据所述聚合根、所述聚合对象和所述聚合关系类型,确定所述聚合模型的边界;
比较所述聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系和隐含关系,包括:
若所述聚合对象不具有独立的生命周期,且所述聚合对象为值对象,则将所述一对一关系确定为一对一值对象关系;
若所述聚合对象与所述聚合根具有相同的生命周期,且所述聚合对象为实体,则将所述关联关系确定为聚合内显示关系,所述显示关系包括一对一显示关系和一对多显示关系;
若所述聚合对象与所述聚合根不具有相同的生命周期,且所述聚合对象为实体,则将所述一对一关系确定为一对一聚合关系,将所述一对多关系确定为一对多隐含关系,所述一对一聚合关系即一对一隐含关系。
2.根据权利要求1所述的一种基于关系的聚合建模方法,其特征在于,所述获取用例或者领域事件,基于所述用例或者所述领域事件提取出聚合对象,并从聚合对象中确定聚合根,包括:
获取用例或者领域事件,并从所述用例或者所述领域事件中提取出名词,作为候选聚合对象;
从所述候选聚合对象中确定值类型数据的值对象,将剩余的候选聚合对象确定为实体;
基于所述用例的流程或者所述领域事件,从所述实体中确定与其他各所述实体以及所述值对象均关联的实体,作为聚合根。
3.根据权利要求1所述的一种基于关系的聚合建模方法,其特征在于,在所述比较所述聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型之后,还包括:
对所述一对一显示关系进行建模,得到一对一显示关系实体;
将所述一对一显示关系实体划分入所述聚合模型中;
对所述一对多显示关系进行建模,得到一对多显示关系实体;
将所述一对多显示关系实体划分入所述聚合模型中。
4.根据权利要求1所述的一种基于关系的聚合建模方法,其特征在于,还包括:
以所述聚合根为根节点,以所述候选聚合对象为子节点,根据所述候选聚合对象与所述聚合根之间的所述聚合关系类型,建立树形聚合模型。
5.根据权利要求4所述的一种基于关系的聚合建模方法,其特征在于,在所述建立树形聚合模型之后,还包括:
用所述聚合关系类型代替所述候选聚合对象,生成聚合模型。
6.根据权利要求1所述的一种基于关系的聚合建模方法,其特征在于,还包括:
采用父节点表征聚合根,采用树形结构的节点类型表征所述聚合关系类型,生成树形存储结构;
采用所述树形存储结构的节点数据表征当前关系节点所包含的信息,并将所述节点数据作为元数据。
7.根据权利要求1所述的一种基于关系的聚合建模方法,其特征在于,还包括:
采用叶子节点处理器和非叶子节点的处理器,来处理树形存储结构的各个节点的元数据;
采用叶子节点处理器的基类,获取当前节点属性的反射信息和特性的注解信息来处理叶子节点;
采用非叶子节点处理器的基类,在遍历子节点前触发先动方法,在子节点遍历后触发后动方法;
采用叶子节点处理器分别处理一对一值对象关系节点、一对一聚合关系节点和一对多隐含关系节点;
采用非叶子节点处理器分别处理聚合根节点、聚合根子类节点、一对一显示关系节点和一对多显示关系节点。
8.一种基于关系的聚合建模设备,其特征在于,所述设备包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够:
获取用例或者领域事件,基于所述用例或者所述领域事件提取出候选聚合对象,并从所述候选聚合对象中确定聚合根;基于所述用例的流程或者所述领域事件,识别所述聚合根与各所述候选聚合对象之间的关联关系,所述关联关系包括一对一关系和一对多关系;
比较所述候选聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系、隐含关系和一对一值对象关系;
将所述显示关系和一对一值对象关系所依赖的候选聚合对象确定为所述聚合模型内的聚合对象,并将引用所述聚合根的显示关系和隐含关系作为所述聚合模型内的关系;
根据所述聚合根、所述聚合对象和所述聚合关系类型,确定所述聚合模型的边界;
比较所述聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系和隐含关系,包括:
若所述聚合对象不具有独立的生命周期,且所述聚合对象为值对象,则将所述一对一关系确定为一对一值对象关系;
若所述聚合对象与所述聚合根具有相同的生命周期,且所述聚合对象为实体,则将所述关联关系确定为聚合内显示关系,所述显示关系包括一对一显示关系和一对多显示关系;
若所述聚合对象与所述聚合根不具有相同的生命周期,且所述聚合对象为实体,则将所述一对一关系确定为一对一聚合关系,将所述一对多关系确定为一对多隐含关系,所述一对一聚合关系即一对一隐含关系。
9.一种非易失性计算机存储介质,存储有计算机可执行指令,其特征在于,所述计算机可执行指令设置为:
获取用例或者领域事件,基于所述用例或者所述领域事件提取出候选聚合对象,并从所述候选聚合对象中确定聚合根;基于所述用例的流程或者所述领域事件,识别所述聚合根与各所述候选聚合对象之间的关联关系,所述关联关系包括一对一关系和一对多关系;
比较所述候选聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系、隐含关系和一对一值对象关系;
将所述显示关系和一对一值对象关系所依赖的候选聚合对象确定为所述聚合模型内的聚合对象,并将引用所述聚合根的显示关系和隐含关系作为所述聚合模型内的关系;
根据所述聚合根、所述聚合对象和所述聚合关系类型,确定所述聚合模型的边界;
比较所述聚合对象的生命周期和所述聚合根的生命周期,识别所述关联关系在聚合模型内的聚合关系类型,所述聚合关系类型包括显示关系和隐含关系,包括:
若所述聚合对象不具有独立的生命周期,且所述聚合对象为值对象,则将所述一对一关系确定为一对一值对象关系;
若所述聚合对象与所述聚合根具有相同的生命周期,且所述聚合对象为实体,则将所述关联关系确定为聚合内显示关系,所述显示关系包括一对一显示关系和一对多显示关系;
若所述聚合对象与所述聚合根不具有相同的生命周期,且所述聚合对象为实体,则将所述一对一关系确定为一对一聚合关系,将所述一对多关系确定为一对多隐含关系,所述一对一聚合关系即一对一隐含关系。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310919289.6A CN116627393B (zh) | 2023-07-26 | 2023-07-26 | 一种基于关系的聚合建模方法、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310919289.6A CN116627393B (zh) | 2023-07-26 | 2023-07-26 | 一种基于关系的聚合建模方法、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116627393A CN116627393A (zh) | 2023-08-22 |
CN116627393B true CN116627393B (zh) | 2023-10-03 |
Family
ID=87610288
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310919289.6A Active CN116627393B (zh) | 2023-07-26 | 2023-07-26 | 一种基于关系的聚合建模方法、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116627393B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1701343A (zh) * | 2002-09-20 | 2005-11-23 | 德克萨斯大学董事会 | 用于信息发现以及关联分析的计算机程序产品、系统以及方法 |
CN112668968A (zh) * | 2020-12-24 | 2021-04-16 | 大唐互联科技(武汉)有限公司 | 一种基于领域驱动设计的仓储管理建模方法及系统 |
CN113326027A (zh) * | 2021-05-12 | 2021-08-31 | 上海安畅网络科技股份有限公司 | 一种领域驱动设计战术建模方法 |
CN113721892A (zh) * | 2021-08-25 | 2021-11-30 | 上海东普信息科技有限公司 | 领域建模方法、装置、计算机设备和存储介质 |
CN114048641A (zh) * | 2022-01-13 | 2022-02-15 | 北京中电普华信息技术有限公司 | 一种电力营销领域模型的设计方法及装置 |
CN116484023A (zh) * | 2023-05-11 | 2023-07-25 | 广东电网有限责任公司广州供电局 | 一种基于人工智能的电力行业知识库构建方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20220114509A1 (en) * | 2020-10-08 | 2022-04-14 | Jpmorgan Chase Bank, N.A. | Decentralized domain-oriented data architecture |
-
2023
- 2023-07-26 CN CN202310919289.6A patent/CN116627393B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1701343A (zh) * | 2002-09-20 | 2005-11-23 | 德克萨斯大学董事会 | 用于信息发现以及关联分析的计算机程序产品、系统以及方法 |
CN112668968A (zh) * | 2020-12-24 | 2021-04-16 | 大唐互联科技(武汉)有限公司 | 一种基于领域驱动设计的仓储管理建模方法及系统 |
CN113326027A (zh) * | 2021-05-12 | 2021-08-31 | 上海安畅网络科技股份有限公司 | 一种领域驱动设计战术建模方法 |
CN113721892A (zh) * | 2021-08-25 | 2021-11-30 | 上海东普信息科技有限公司 | 领域建模方法、装置、计算机设备和存储介质 |
CN114048641A (zh) * | 2022-01-13 | 2022-02-15 | 北京中电普华信息技术有限公司 | 一种电力营销领域模型的设计方法及装置 |
CN116484023A (zh) * | 2023-05-11 | 2023-07-25 | 广东电网有限责任公司广州供电局 | 一种基于人工智能的电力行业知识库构建方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN116627393A (zh) | 2023-08-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Sevilla Ruiz et al. | Inferring versioned schemas from NoSQL databases and its applications | |
US20140279839A1 (en) | Integration of transactional and analytical capabilities of a database management system | |
Ramanathan et al. | Extraction of object-oriented structures from existing relational databases | |
US11334549B2 (en) | Semantic, single-column identifiers for data entries | |
CN107315764B (zh) | 一种非关系型数据库关联数据的更新方法及系统 | |
CN103559189B (zh) | 基于元数据集成模型的电力仿真培训资源管理系统及方法 | |
JPH10501086A (ja) | 記憶プレーン編成及びそれに基づく記憶システム | |
CN108540351B (zh) | 分布式大数据服务的自动化测试方法 | |
US20070255685A1 (en) | Method and system for modelling data | |
Vajk et al. | Automatic NoSQL schema development: A case study | |
US11341418B2 (en) | Ascriptive and descriptive entities for process and translation: a limited iterative ontological notation | |
CN115080765A (zh) | 一种航天质量知识图谱构建方法、系统、介质和设备 | |
CN111475653B (zh) | 油气勘探开发领域的知识图谱的构建方法及装置 | |
Tiwari et al. | Pattern warehouse: context based modeling and quality issues | |
CN116108194A (zh) | 基于知识图谱的搜索引擎方法、系统、存储介质和电子设备 | |
US11055275B2 (en) | Database revalidation using parallel distance-based groups | |
Mancas | MatBase—A tool for transparent programming while modeling data at conceptual levels | |
CN110019554B (zh) | 数据驱动型应用的数据模型、数据建模系统和方法 | |
CN116627393B (zh) | 一种基于关系的聚合建模方法、设备及介质 | |
Maran et al. | Alternative approaches to data storing and processing | |
Molhanec | Deriving relational normalisation from conceptual normalisation | |
Chen et al. | Research on industrial software testing knowledge database based on ontology | |
Ruiz et al. | An MDE approach to generate schemas for object-document mappers | |
Protic | Configuration management for models: Generic methods for model comparison and model co-evolution | |
Yan et al. | Temporal RDF (S) data storage and query with HBase |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20231009 Address after: Room 1208A, Unit 1, 11th Floor, Huizhi Building, No. 9 Xueqing Road, Haidian District, Beijing 100085 Patentee after: Beijing hex Technology Co.,Ltd. Patentee after: Liu Jiyuan Address before: Room 1208A, Unit 1, 11th Floor, Huizhi Building, No. 9 Xueqing Road, Haidian District, Beijing 100085 Patentee before: Beijing hex Technology Co.,Ltd. |