一种基于领域驱动设计加载实体类的方法及系统技术方案

技术编号:39643206 阅读:19 留言:0更新日期:2023-12-09 11:10
本发明专利技术涉及领域驱动设计技术领域,尤其涉及一种基于领域驱动设计加载实体类的方法及系统,其方法包括启动应用前,自动扫描符合预设条件的实体类,按模板生成类

【技术实现步骤摘要】
一种基于领域驱动设计加载实体类的方法及系统


[0001]本专利技术涉及领域驱动
,尤其涉及一种基于领域驱动设计加载实体类的方法及系统


技术介绍

[0002]领域驱动设计是一种基于模型驱动的软件设计方式

它以领域为核心,分析领域中的问题,通过建立一个领域模型来有效的解决领域中的核心的复杂问题

领域模型有四种模式,分别为失血模型

贫血模型

充血模型

胀血模型这四种,其中:充血模型有属性的
setter

getter
方法

聚合了对应领域范畴的业务领域行为,包含领域对象的状态发生的变化

由于依赖
repository
,在业务领域行为执行过程中也负责数据的持久化存储

[0003]目前,陶瓷产业数字化平台基于领域驱动设计的充血模型定义实体类,每个实体类包含大量的静态代码块和静态变量,用于完成对应的逻辑功能

按照默认的类加载方式,这些实体类是要在使用时才会进行初始化,如果是第一次加载实体类,就会先执行静态代码块和静态变量的初始化,这会导致应用第一次响应请求缓慢

如果是高并发条件,多个线程执行初始化操作,会引起内存飙升,导致应用响应失败,甚至服务器宕机


技术实现思路

[0004]本专利技术的目的在于提出一种基于领域驱动设计加载实体类的方法及系统,以解决技术背景中提及的不足之处

[0005]为达此目的,本专利技术采用以下技术方案:
[0006]一种基于领域驱动设计加载实体类的方法,包括以下步骤:
[0007]S1、
启动应用前,自动扫描符合预设条件的实体类,按模板生成类
A
,由类
A
的静态代码块创建符合预设条件的实体类的实例;
[0008]S2、
启动应用时,将类
A
交给
Spring
框架生产对应的
Bean
对象;
[0009]S3、Spring
框架进行初始化,在生产类
A

Bean
对象时,执行类
A
的静态代码块的内容;
[0010]S4、
触发创建类
A
的静态代码块里各个实体类的实例,完成各个实体类的静态代码块初始化;
[0011]S5、
判断
Spring
框架初始化是否发生异常,如果
Spring
框架初始化发生异常,则应用启动失败,反馈失败信息;如果
Spring
框架初始化没有发生异常,则应用启动成功,应用正常启动后,当再次创建实体类的实例时,静态代码块无需再次执行

[0012]优选的,在
S1
中,具体包括以下步骤:
[0013]S11、
建立两个
java
文件,分别定义为类
A
和工具方法
B
,在类
A
内填写特定的注释文本;
[0014]S12、
自定义一个模板,在该模板内写入静态代码块,其中静态代码块包含静态变量;
[0015]S13、
工具方法
B
采用递归方式获取指定的文件夹路径下,符合预设条件的实体类的全限定名;
[0016]S14、
将符合条件的实体类的全限定名和模板内的静态代码块进行结合,生成新的静态代码块,并填充到类
A
内特定的注释文本的下一行,创建出实体类的实例

[0017]优选的,在
S1
中,所述代码生成程序还包括以下步骤:
[0018]S15、
当第一次加载符合预设条件的实体类时,先执行符合预设条件的实体类的父类的静态代码块和静态变量初始化,再执行符合预设条件的实体类的子类的静态代码块和静态变量初始化;
[0019]S16、
当新增符合预设条件的实体类时,则重复
S13
,工具方法
B
以全量的方式重新生成新的静态代码块,新的静态代码块会覆盖上一次生成的静态代码块,填充到类
A
内特定的注释文本的下一行,创建出新的实体类的实例

[0020]优选的,在
S13
中,所述符合预设条件的实体类的全限定名,具体为符合以下三种条件的其中一种条件的实体类的全限定名:
[0021](1)
使用了
@Table
注解的实体类;
[0022](2)
自定义的领域驱动基类及其子类;
[0023](3)
自定义的
vo
基类及其子类

[0024]优选的,在
S13
中,所述将符合条件的实体类的全限定名和模板内的静态代码块进行结合,具体为:
[0025]将实体类的全限定名替换静态代码块内的静态变量

[0026]一种基于领域驱动设计加载实体类的系统,采用上述所述的一种基于领域驱动设计加载实体类的方法,包括:
[0027]准备模块,用于启动应用前,自动扫描符合预设条件的实体类,按模板生成类
A
,由类
A
的静态代码块创建符合预设条件的实体类的实例;
[0028]交付模块,用于启动应用时,将类
A
交给
Spring
框架生产对应的
Bean
对象;
[0029]初始化模块,用于
Spring
框架进行初始化,在生产类
A

Bean
对象时,执行类
A
的静态代码块的内容;
[0030]触发模块,用于触发创建类
A
的静态代码块里各个实体类的实例,完成各个实体类的静态代码块初始化;
[0031]判断模块,用于判断
Spring
框架初始化是否发生异常,如果
Spring
框架初始化发生异常,则应用启动失败,反馈失败信息;如果
Spring
框架初始化没有发生异常,则应用启动成功,应用正常启动后,当再次创建实体类的实例时,静态代码块无需再次执行

[0032]优选的,所述准备模块包括:
[0033]建立子模块,用于建立两个
java
文件,分别定义为类
A
和工具方法
B
,在类
A
内填写特定的注释文本;
[0034]自定义子模块,用于自定义一个模板,在该模板内写入静态代码块,其中静态代码块包含静态变量;
[0035本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种基于领域驱动设计加载实体类的方法,其特征在于,包括以下步骤:
S1、
启动应用前,自动扫描符合预设条件的实体类,按模板生成类
A
,由类
A
的静态代码块创建符合预设条件的实体类的实例;
S2、
启动应用时,将类
A
交给
Spring
框架生产对应的
Bean
对象;
S3、Spring
框架进行初始化,在生产类
A

Bean
对象时,执行类
A
的静态代码块的内容;
S4、
触发创建类
A
的静态代码块里各个实体类的实例,完成各个实体类的静态代码块初始化;
S5、
判断
Spring
框架初始化是否发生异常,如果
Spring
框架初始化发生异常,则应用启动失败,反馈失败信息;如果
Spring
框架初始化没有发生异常,则应用启动成功,应用正常启动后,当再次创建实体类的实例时,静态代码块无需再次执行
。2.
根据权利要求1所述的一种基于领域驱动设计加载实体类的方法,其特征在于,在
S1
中,具体包括以下步骤:
S11、
建立两个
java
文件,分别定义为类
A
和工具方法
B
,在类
A
内填写特定的注释文本;
S12、
自定义一个模板,在该模板内写入静态代码块,其中静态代码块包含静态变量;
S13、
工具方法
B
采用递归方式获取指定的文件夹路径下,符合预设条件的实体类的全限定名;
S14、
将符合条件的实体类的全限定名和模板内的静态代码块进行结合,生成新的静态代码块,并填充到类
A
内特定的注释文本的下一行,创建出实体类的实例
。3.
根据权利要求2所述的一种基于领域驱动设计加载实体类的方法,其特征在于,在
S1
中,所述代码生成程序还包括以下步骤:
S15、
当第一次加载符合预设条件的实体类时,先执行符合预设条件的实体类的父类的静态代码块和静态变量初始化,再执行符合预设条件的实体类的子类的静态代码块和静态变量初始化;
S16、
当新增符合预设条件的实体类时,则重复
S13
,工具方法
B
以全量的方式重新生成新的静态代码块,新的静态代码块会覆盖上一次生成的静态代码块,填充到类
A
内特定的注释文本的下一行,创建出新的实体类的实例
。4.
根据权利要求2所述的一种基于领域驱动设计加载实体类的方法,其特征在于,在
S13
中,所述符合预设条件的实体类的全限定名,具体为符合以下三种条件的其中一种条件的实体类的全限定名:
(1)
使用了
@Table
注解的实体类;
(2)
自定义的领域驱动基类及其子类;
(3)
自定义的
vo
基类及其子类
。5.
根据权利要求2所述的一种基于领域驱动设计加载实体类的方法,其特征在于...

【专利技术属性】
技术研发人员:陈啟铭吕火生孔令超
申请(专利权)人:西藏众陶联供应链服务有限公司林周佳住家网络科技有限公司林周利利佳供应链服务有限公司共青城市众陶联供应链服务有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1