CN107741847A - 实现领域驱动模型的方法及装置 - Google Patents

实现领域驱动模型的方法及装置 Download PDF

Info

Publication number
CN107741847A
CN107741847A CN201710945625.9A CN201710945625A CN107741847A CN 107741847 A CN107741847 A CN 107741847A CN 201710945625 A CN201710945625 A CN 201710945625A CN 107741847 A CN107741847 A CN 107741847A
Authority
CN
China
Prior art keywords
model element
model
class
explained
note
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.)
Pending
Application number
CN201710945625.9A
Other languages
English (en)
Inventor
石正川
刘兆明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Jiangsu Km Network Polytron Technologies Inc
Original Assignee
Jiangsu Km Network Polytron Technologies Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Jiangsu Km Network Polytron Technologies Inc filed Critical Jiangsu Km Network Polytron Technologies Inc
Priority to CN201710945625.9A priority Critical patent/CN107741847A/zh
Publication of CN107741847A publication Critical patent/CN107741847A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种实现领域驱动模型的方法及装置,涉及计算机软件技术领域,包括:在编译程序源代码时,确定所述源代码内各个模型元素类对应的模型元素;判断预先为各个所述模型元素添加的模型元素注解是否分别满足预设条件,所述模型元素注解包括注解标识;若存在至少一个所述模型元素注解满足预设条件,针对每个满足预设条件的模型元素注解,分别调用与注解标识对应的注解处理器处理所述模型元素注解,得到Class类文件。本发明提供的一种实现领域驱动模型的方法及装置,通过在源代码中添加多个模型元素注解,在编译过程中分别调用与各个模型元素注解对应的注解处理器进行处理,即可得到领域驱动模型,简化业务开发的工作量,提高开发效率。

Description

实现领域驱动模型的方法及装置
技术领域
本发明涉及计算机软件技术领域,尤其是涉及一种实现领域驱动模型的方法及装置。
背景技术
领域驱动设计(Domain-driven Design,DDD),是一套综合软件系统分析和设计的面向对象建模方法。过去系统分析和系统设计都是分离的,这样割裂的结果导致需求分析的结果无法直接进行设计编程,而能够进行编程运行的代码却扭曲需求,导致客户运行软件后才发现很多功能不是自己想要的,而且软件不能快速跟随需求变化。
而领域驱动设计打破了这种隔阂,提出了领域驱动模型的概念,统一了分析和设计编程,使得软件能够更灵活快速跟随需求变化。DDD的领域驱动模型的主要构成要素有:实体、值对象、聚合、聚合根、服务、仓储和工厂等。这些模型要素都有一些公共的属性和行为,以实体为例,实体作为一种领域对象,有如下的一些定义:定义ID标识;可以被仓储持久化;定义描述信息(即JAVA中的toString方法);成员变量对应的存取方法(getter、setter方法);必要的构造函数。其中,定义ID标识和构造函数等部分公共行为,可以通过定义基类的方法实现,即首先定义一个实体的基类,在基类定义实体公共的行为,然后所有实体类都继承这个基类。但这种实现方法的问题在于:继承是一种深耦合,侵入业务代码,扩展性较差,并且JAVA只支持单重继承,在运行时也需要依赖框架,系统复杂性较高。另外,比如仓储持久化、描述信息、成员变量对应的存取方法等部分公共行为,是无法通过定义基类的方法实现,必须在每个实现类重复定义。由此可见,现有的实现领域驱动模型的方法比较复杂,导致开发效率较差。
发明内容
有鉴于此,本发明的目的在于提供一种实现领域驱动模型的方法及装置,以解决现有技术中实现领域驱动模型的实现方法比较复杂,导致开发效率较差的技术问题。
第一方面,本发明实施例提供了一种实现领域驱动模型的方法,包括:
在编译程序源代码时,确定所述源代码内各个模型元素类对应的模型元素;
判断预先为各个所述模型元素添加的模型元素注解是否分别满足预设条件,所述模型元素注解包括注解标识;
若存在至少一个所述模型元素注解满足预设条件,针对每个满足预设条件的模型元素注解,分别调用与注解标识对应的注解处理器处理所述模型元素注解,得到Class类文件。
结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述分别调用与注解标识对应的注解处理器处理所述模型元素注解,得到Class类文件,包括:
根据预设的对应关系,获取与所述模型元素注解对应的模型元素的属性信息和行为信息;
将所述模型元素的属性信息和行为信息插入到编译形成的抽象语法树中;
删除与所述模型元素注解相关的依赖;
将所述抽象语法树转换成Class类文件。
结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,所述依赖至少包括:所述模型元素注解、与所述模型元素注解对应的导入包和说明。
结合第一方面,本发明实施例提供了第一方面的第三种可能的实施方式,其中,所述在编译程序源代码之前,包括:
获取预先生成的JAR包,所述JAR包中包括:每个模型元素对应的模型元素注解、与每个模型元素注解对应的注解处理器和注解处理器入口类;
将每个模型元素注解添加到与自身对应的模型元素类的源代码中。
结合第一方面,本发明实施例提供了第一方面的第四种可能的实施方式,其中,所述在编译程序源代码之前,还包括:
将所述JAR包添加到所述JAVA语言编译器编译的编译路径中。
第二方面,本发明实施例还提供一种实现领域驱动模型的装置,包括:
确定模块,用于在编译程序源代码时,确定所述源代码内各个模型元素类对应的模型元素;
注解处理器入口类模块,用于判断预先为各个所述模型元素添加的模型元素注解是否分别满足预设条件,所述模型元素注解包括注解标识,若存在至少一个所述模型元素注解满足预设条件,针对每个满足预设条件的模型元素注解,分别调用与注解标识对应的注解处理器处理所述模型元素注解,得到Class类文件。
结合第二方面,本发明实施例提供了第二方面的第一种可能的实施方式,其中,所述注解处理器包括:
第一获取模块,根据预设的对应关系,获取与所述模型元素注解对应的模型元素的属性信息和行为信息;
插入模块,用于将所述模型元素的属性信息和行为信息插入到编译形成的抽象语法树中;
删除模块,用于删除与所述模型元素注解相关的依赖;
转换模块,用于将所述抽象语法树转换成Class类文件。
结合第二方面,本发明实施例提供了第二方面的第二种可能的实施方式,其中,所述实现领域驱动模型的装置还包括:
第二获取模块,用于获取预先生成的JAR包,所述JAR包中包括:每个模型元素对应的模型元素注解、与每个模型元素注解对应的注解处理器和注解处理器入口类;
第一添加模块,用于将每个模型元素注解添加到与自身对应的模型元素类的源代码中;
第二添加模块,用于将所述JAR包添加到所述JAVA语言编译器编译的编译路径中。
第三方面,本发明实施例还提供一种电子设备,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述第一方面所述的方法的步骤。
第四方面,本发明实施例还提供一种具有处理器可执行的非易失的程序代码的计算机可读介质,所述程序代码使所述处理器执行第一方面所述的方法。
本发明实施例带来了以下有益效果:本发明提供的一种实现领域驱动模型的方法及装置,预先在源代码的的各个所述模型元素类上添加对应的模型元素注解,在编译JAVA源代码时,判断各个模型元素注解是否分别满足预设条件,针对每个满足预设条件的模型元素注解,分别调用对应的注解处理器处理所述模型元素注解,最终得到Class类文件。
本发明提供的一种实现领域驱动模型的方法及装置,通过在源代码中添加多个模型元素注解,在编译过程中分别调用与各个模型元素注解对应的注解处理器进行处理,即可以得到领域驱动模型,大大简化了业务开发的工作量,提高开发效率。
本发明的其他特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点在说明书、权利要求书以及附图中所特别指出的结构来实现和获得。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的实现领域驱动模型的方法的流程图;
图2为本发明实施例二提供的实现领域驱动模型的方法的流程图;
图3为本发明实施例三提供的实现领域驱动模型的方法的流程图;
图4为本发明实施例四提供的实现领域驱动模型的装置的结构示意图;
图5为本发明实施例五提供的实现领域驱动模型的装置的结构示意图。
图标:
110-确定模块;120-注解处理器入口类模块;130-注解处理器;131-第一获取模块;132-插入模块;133-删除模块;134-转换模块;140-第二获取模块;150-第一添加模块;160-第二添加模块。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面对下列实施例中出现的名词及概念进行解释说明:
JAVA语言编译器是指javac,其全称为javacompilation,javac工具读取由JAVA语言编写的类和接口的定义,并将它们编译成字节代码的Class(类)文件。
领域驱动模型设计是解决复杂软件的分析、设计和开发方面的问题。2004年著名建模专家Eric Evans发表了他最具影响力的书籍:《Domain-Driven Design–TacklingComplexity in the Heart of Software》(中文译名:领域驱动设计—软件核心复杂性应对之道),书中提出了“领域驱动设计(简称DDD)”的概念。领域驱动设计事实上是针对OOAD的一个扩展和延伸,DDD基于面向对象分析与设计技术,对技术架构进行了分层规划,同时对每个类进行了策略和类型的划分。
DDD的领域模型主要构成元素包括:实体、值对象、聚合根、数据传输对象和内嵌对象等数据模型元素,以及复制对象类、克隆对象和序列化对象等公共数据操作。
每个模型元素都有一些公共的属性和行为。以聚合根为例,对应的注解@AggregateRoot,具有如下特性:
1.可以持久化。目前持久化方式为JPA、Redis,默认为JPA。
2.无参构造函数
3.属性对应的getter、setter方法,setter方法支持链式写法
4.hashcode、equals、toString方法
5.聚合根不支持继承,即一个对象继承聚合根后,该对象并不是聚合根,需要重新添加注解。
注解,用于标识需要绑定的对象,例如类和元素。注解是一个接口,程序可以通过反射获取指定程序元素的注解对象,再通过注解对象获取注解里的元数据。它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查。注解是以‘@注解名’在代码中存在的。多个模型元素各自对应的注解:聚合根-“@AggregateRoot”;实体对象-“@Entity”;值对象-“@ValueObject”;数据传输对象-“@DataTransferObject”;内嵌对象-“@Embeddable”;复制对象类-“@Implement”或者“@Implements”;克隆对象-”@Clone”;序列化对类-“@Serialize”。
注解处理器:从1.6版本开始,JAVA定义了“JSR 269”(插入式注解处理API,[插入式注解处理API(JSR 269)提供一套标准API来处理Annotations(JSR 175),]PluggableAnnotation Processing API)规范。JSR 269规范用于编译期间而不是运行期间处理注解(Annotation)。注解处理器(Annotation Processor)相当于编译器的一个插件,所以称为插入式注解处理。如果注解处理器处理注解时(执行process方法)产生了新的JAVA代码,编译器会再调用一次注解处理器,如果第二次处理还有新代码产生,就会接着调用注解处理器,直到没有新代码产生为止。每执行一次process方法被称为一个“round”,这样整个注解处理(Annotation Processing)过程可以看作是一个round的序列。
抽象语法树,是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构。
目前,现有技术中实现领域驱动模型的实现方法比较复杂,导致开发效率较差的技术问题,基于此,本发明实施例提供的一种实现领域驱动模型的方法及装置,通过在源代码中添加多个模型元素注解,在编译过程中分别调用与各个模型元素注解对应的注解处理器进行处理,即可以得到领域驱动模型,大大简化了业务开发的工作量,提高开发效率。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种实现领域驱动模型的方法方法进行详细介绍。
如图1所示,本发明实施例提供了一种实现领域驱动模型的方法,包括以下步骤。
S101,在编译程序源代码时,确定所述源代码内各个模型元素类对应的模型元素。
具体的,开发工具需要使用1.6或以上的版本的JDK(Java Development Kit),即jave运行配置环境包。模型元素可以为实体、值对象、聚合根、数据传输对象、内嵌对象服、复制对象类、克隆对象和序列化对象等模型元素。
在编译业务程序源代码之前,业务开发人员将所述外部JAR包导入到自己的业务项目中,以使开发工具获取预先生成的外部JAR包,所述JAR包中包括:每个模型元素对应的模型元素注解、与每个模型元素注解对应的注解处理器和注解处理器入口类。
具体的,外部JAR包可以由程序开发人员提供,程序开发人员先定义每个模型元素注解和模型元素注解对应的属性,所述属性用于扩展模型元素的属性和行为,之后定义与每个模型元素注解对应的注解处理器,编写注解处理器入口类,入口类需要实现“javax.annotation.processing.Processor”接口,入口类会在JAVA源代码编译过程中被调用,最后将每个模型元素对应的模型元素注解、与每个模型元素注解对应的注解处理器和注解处理器入口类打包输出JAR包。
在业务模块编写代码时,通过编写的添加代码将每个模型元素注解添加到与自身对应的模型元素类的源代码中。也可以将多个模型元素注解添加到同一个类中。
之后将所述JAR包添加到所述JAVA语言编译器编译的Classpath(即类路径)下。在JAVA语言编译器编译代码时,会将注解处理器入口类添加到“-processor”或“-procesorpath”中。
S102,判断预先为各个所述模型元素添加的模型元素注解是否分别满足预设条件,所述模型元素注解包括注解标识。
例如,聚合根的注解标识为“AggregateRoot”,实体对象的注解标识为“Entity”和值对象的注解标识为“ValueObject”等等。
S103,若存在至少一个所述模型元素注解满足预设条件,针对每个满足预设条件的模型元素注解,分别调用与注解标识对应的注解处理器处理所述模型元素注解,得到Class类文件。
具体的,注解处理器入口类会检查模型元素注解的合法性,若模型元素注解合法,注解处理器入口类调用与模型元素注解对应的注解处理器进行处理。
如图2所示,注解处理器处理模型元素注解的方法包括以下几个步骤。
S201,根据预设的对应关系,获取与所述模型元素注解对应的模型元素的属性信息和行为信息。
S202,将所述模型元素的属性信息和行为信息插入到编译形成的抽象语法树中。
S203,删除与所述模型元素注解相关的依赖。
具体的,所述依赖至少包括:所述模型元素注解、与所述模型元素注解对应的导入包和说明。
S204,将所述抽象语法树转换成Class类文件。
由于在编译过程中删除了与所述模型元素注解相关的依赖,使最终形成的Class类文件不依赖注解框架,即程序只在编译时依赖框架,运行时不依赖框架,减少依赖资源,降低系统复杂性,提高程序执行效率。
与现有技术相比,基于“JSR 269”规范,使用注解框架不需要继承框架内的类,不侵入业务代码,业务模块也无需额外编码,大大简化了业务开发的工作量,提升开发效率。
如图3所示,实现领域驱动模型的具体流程为:
S301,获取预先生成的JAR包,所述JAR包中包括:每个模型元素对应的模型元素注解、与每个模型元素注解对应的注解处理器和注解处理器入口类;
S302,将每个模型元素注解添加到与自身对应的模型元素类的源代码中;
S303,编译已添加模型元素注解的程序源代码时,将注解处理器入口类添加到编译参数“-processor”或“-procesorpath”中;
S304,注解处理器入口类检查模型元素注解是否合法;
S305,如果注解合法,注解处理器入口类调用与模型元素注解对应的注解处理器进行处理;
S306,注解处理器处理对应的注解,向源代码元数据中插入模型元素对应的公共属性和行为,并清除源代码元数据中注解相关的依赖。
本发明实施例提供的一种实现领域驱动模型的方法,通过在源代码中添加多个模型元素注解,在编译过程中分别调用与各个模型元素注解对应的注解处理器进行处理,即可以得到领域驱动模型,大大简化了业务开发的工作量,提高开发效率。
如图4所示,在本发明的又一实施例中,提供了一种实现领域驱动模型的装置,包括:确定模块110、注解处理器入口类模块120和注解处理器130。
确定模块110,用于在编译程序源代码时,确定所述源代码内各个模型元素类对应的模型元素;
注解处理器入口类模块120,用于判断预先为各个所述模型元素添加的模型元素注解是否分别满足预设条件,所述模型元素注解包括注解标识,若存在至少一个所述模型元素注解满足预设条件,针对每个满足预设条件的模型元素注解,分别调用与注解标识对应的注解处理器处理所述模型元素注解,得到Class类文件。
在前述实施例的基础上,如图5所示,在本发明的又一实施例中,所述注解处理器130包括:第一获取模块131、插入模块132、删除模块134和转换模块135。
第一获取模块131,根据预设的对应关系,获取与所述模型元素注解对应的模型元素的属性信息和行为信息。
插入模块132,用于将所述模型元素的属性信息和行为信息插入到编译形成的抽象语法树中。
删除模块134,用于删除与所述模型元素注解相关的依赖。
转换模块135,用于将所述抽象语法树转换成Class类文件。
在本发明的又一实施例中,所述实现领域驱动模型的装置还包括:第二获取模块140、第一添加模块150和第二添加模块160。
第二获取模块140,用于获取预先生成的JAR包,所述JAR包中包括:每个模型元素对应的模型元素注解、与每个模型元素注解对应的注解处理器和注解处理器入口类。
第一添加模块150,用于将每个模型元素注解添加到与自身对应的模型元素类的源代码中。
第二添加模块160,用于将所述JAR包添加到所述JAVA语言编译器编译的编译路径中。
在本发明的又一实施例中,还提供一种电子设备,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述实现领域驱动模型的方法的步骤。
在本发明的又一实施例中,还提供一种具有处理器可执行的非易失的程序代码的计算机可读介质,所述程序代码使所述处理器执行述实现领域驱动模型的方法。
本发明实施例所提供的实现领域驱动模型的方法、装置以及系统的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
另外,在本发明实施例的描述中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以具体情况理解上述术语在本发明中的具体含义。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。
最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

Claims (10)

1.一种实现领域驱动模型的方法,其特征在于,包括:
在编译程序源代码时,确定所述源代码内各个模型元素类对应的模型元素;
判断预先为各个所述模型元素添加的模型元素注解是否分别满足预设条件,所述模型元素注解包括注解标识;
若存在至少一个所述模型元素注解满足预设条件,针对每个满足预设条件的模型元素注解,分别调用与注解标识对应的注解处理器处理所述模型元素注解,得到Class类文件。
2.根据权利要求1所述的实现领域驱动模型的方法,其特征在于,所述分别调用与注解标识对应的注解处理器处理所述模型元素注解,得到Class类文件,包括:
根据预设的对应关系,获取与所述模型元素注解对应的模型元素的属性信息和行为信息;
将所述模型元素的属性信息和行为信息插入到编译形成的抽象语法树中;
删除与所述模型元素注解相关的依赖;
将所述抽象语法树转换成Class类文件。
3.根据权利要求2所述的实现领域驱动模型的方法,其特征在于,所述依赖至少包括:所述模型元素注解、与所述模型元素注解对应的导入包和说明。
4.根据权利要求1所述的实现领域驱动模型的方法,其特征在于,所述在编译程序源代码之前,包括:
获取预先生成的JAR包,所述JAR包中包括:每个模型元素对应的模型元素注解、与每个模型元素注解对应的注解处理器和注解处理器入口类;
将每个模型元素注解添加到与自身对应的模型元素类的源代码中。
5.根据权利要求4所述的实现领域驱动模型的方法,其特征在于,所述在编译程序源代码之前,还包括:
将所述JAR包添加到所述JAVA语言编译器编译的编译路径中。
6.一种实现领域驱动模型的装置,其特征在于,包括:
确定模块(110),用于在编译程序源代码时,确定所述源代码内各个模型元素类对应的模型元素;
注解处理器入口类模块(120),用于判断预先为各个所述模型元素添加的模型元素注解是否分别满足预设条件,所述模型元素注解包括注解标识,若存在至少一个所述模型元素注解满足预设条件,针对每个满足预设条件的模型元素注解,分别调用与注解标识对应的注解处理器处理所述模型元素注解,得到Class类文件。
7.根据权利要求6所述的实现领域驱动模型的装置,其特征在于,所述注解处理器(130)包括:
第一获取模块(131),根据预设的对应关系,获取与所述模型元素注解对应的模型元素的属性信息和行为信息;
插入模块(132),用于将所述模型元素的属性信息和行为信息插入到编译形成的抽象语法树中;
删除模块(133),用于删除与所述模型元素注解相关的依赖;
转换模块(134),用于将所述抽象语法树转换成Class类文件。
8.根据权利要求7所述的实现领域驱动模型的装置,其特征在于,还包括:
第二获取模块(140),用于获取预先生成的JAR包,所述JAR包中包括:每个模型元素对应的模型元素注解、与每个模型元素注解对应的注解处理器和注解处理器入口类;
第一添加模块(150),用于将每个模型元素注解添加到与自身对应的模型元素类的源代码中;
第二添加模块(160),用于将所述JAR包添加到所述JAVA语言编译器编译的编译路径中。
9.一种电子设备,包括存储器、处理器,所述存储器中存储有可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述权利要求1至5任一项所述的方法的步骤。
10.一种具有处理器可执行的非易失的程序代码的计算机可读介质,其特征在于,所述程序代码使所述处理器执行所述权利要求1至5任一所述的方法。
CN201710945625.9A 2017-10-11 2017-10-11 实现领域驱动模型的方法及装置 Pending CN107741847A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710945625.9A CN107741847A (zh) 2017-10-11 2017-10-11 实现领域驱动模型的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710945625.9A CN107741847A (zh) 2017-10-11 2017-10-11 实现领域驱动模型的方法及装置

Publications (1)

Publication Number Publication Date
CN107741847A true CN107741847A (zh) 2018-02-27

Family

ID=61237307

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710945625.9A Pending CN107741847A (zh) 2017-10-11 2017-10-11 实现领域驱动模型的方法及装置

Country Status (1)

Country Link
CN (1) CN107741847A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109597621A (zh) * 2018-08-24 2019-04-09 天津字节跳动科技有限公司 封装Dagger的方法、装置、Dagger、解耦方法、装置、设备及介质
CN110968340A (zh) * 2018-09-29 2020-04-07 京东数字科技控股有限公司 一种实现多版本依赖隔离的方法和装置
CN111984243A (zh) * 2020-08-31 2020-11-24 上海玳鸽信息技术有限公司 一种基于注解的通用安全检查及功能扩展方法及装置
CN112486990A (zh) * 2020-11-27 2021-03-12 山东浪潮通软信息科技有限公司 一种根据模型描述同步数据库表结构的方法及设备
CN112668968A (zh) * 2020-12-24 2021-04-16 大唐互联科技(武汉)有限公司 一种基于领域驱动设计的仓储管理建模方法及系统
CN116107585A (zh) * 2023-02-17 2023-05-12 广州市保伦电子有限公司 一种服务器端编译时期xml生成方法及装置
WO2023193135A1 (zh) * 2022-04-06 2023-10-12 京东方科技集团股份有限公司 业务编码解释织入方法、业务服务系统和存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070226681A1 (en) * 2006-03-23 2007-09-27 Bestbrains Aps System for annotation based model driven software development
US20130212568A1 (en) * 2012-02-10 2013-08-15 Oracle International Corporation Method and Apparatus for Synchronization Annotation
CN106951254A (zh) * 2017-03-22 2017-07-14 中国人民银行清算总中心 支付系统中相似业务功能模块复用的方法及装置
CN107203535A (zh) * 2016-03-16 2017-09-26 阿里巴巴集团控股有限公司 信息查询方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070226681A1 (en) * 2006-03-23 2007-09-27 Bestbrains Aps System for annotation based model driven software development
US20130212568A1 (en) * 2012-02-10 2013-08-15 Oracle International Corporation Method and Apparatus for Synchronization Annotation
CN107203535A (zh) * 2016-03-16 2017-09-26 阿里巴巴集团控股有限公司 信息查询方法及装置
CN106951254A (zh) * 2017-03-22 2017-07-14 中国人民银行清算总中心 支付系统中相似业务功能模块复用的方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
WEIXIN_33774615: "注解(二)- 自定义注解处理器", 《HTTPS://BLOG.CSDN.NET/WEIXIN_33774615/ARTICLE/DETAILS/85884686》 *
丁涛: "基于领域驱动设计的物流平台系统实现", 《中国优秀硕士学位论文全文数据库信息科技辑》 *

Cited By (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109597621A (zh) * 2018-08-24 2019-04-09 天津字节跳动科技有限公司 封装Dagger的方法、装置、Dagger、解耦方法、装置、设备及介质
CN109597621B (zh) * 2018-08-24 2022-10-14 天津字节跳动科技有限公司 封装Dagger的方法、装置、终端设备及存储介质
CN110968340A (zh) * 2018-09-29 2020-04-07 京东数字科技控股有限公司 一种实现多版本依赖隔离的方法和装置
CN111984243A (zh) * 2020-08-31 2020-11-24 上海玳鸽信息技术有限公司 一种基于注解的通用安全检查及功能扩展方法及装置
CN112486990A (zh) * 2020-11-27 2021-03-12 山东浪潮通软信息科技有限公司 一种根据模型描述同步数据库表结构的方法及设备
CN112486990B (zh) * 2020-11-27 2023-05-02 浪潮通用软件有限公司 一种根据模型描述同步数据库表结构的方法及设备
CN112668968A (zh) * 2020-12-24 2021-04-16 大唐互联科技(武汉)有限公司 一种基于领域驱动设计的仓储管理建模方法及系统
CN112668968B (zh) * 2020-12-24 2023-04-25 大唐互联科技(武汉)有限公司 一种基于领域驱动设计的仓储管理建模方法及系统
WO2023193135A1 (zh) * 2022-04-06 2023-10-12 京东方科技集团股份有限公司 业务编码解释织入方法、业务服务系统和存储介质
CN116107585A (zh) * 2023-02-17 2023-05-12 广州市保伦电子有限公司 一种服务器端编译时期xml生成方法及装置
CN116107585B (zh) * 2023-02-17 2024-03-08 广东保伦电子股份有限公司 一种服务器端编译时期xml生成方法及装置

Similar Documents

Publication Publication Date Title
US11868745B2 (en) System and method for compiling high-level language code into a script executable on a blockchain platform
CN107741847A (zh) 实现领域驱动模型的方法及装置
CN112100054B (zh) 一种面向数据管控的程序静态分析方法和系统
Schmitt et al. ExaSlang: A domain-specific language for highly scalable multigrid solvers
CN102177502B (zh) 对中间码的逻辑扩展
Agrawal et al. Generative programming via graph transformations in the model-driven architecture
CN110149800B (zh) 一种用于处理与源程序的源代码相关联的抽象语法树的装置
US8046202B1 (en) Generation of intermediate representations based on user specified elements in a graphical model that enable simulation, propagation and code generation
Myreen Formal verification of machine-code programs
Torlak et al. Applications and extensions of Alloy: past, present and future
US8935657B2 (en) Model-to-model transformation by kind
Nowakowski et al. Requirements-level language and tools for capturing software system essence
Gotti et al. UML executable: A comparative study of UML compilers and interpreters
Rieger et al. Challenges and Opportunities of Modularizing Textual Domain-Specific Languages.
US7246056B1 (en) Runtime parameter mapping for system simulation
Philips et al. Dependence-driven delimited CPS transformation for JavaScript
Kersten et al. ResAna: a resource analysis toolset for (real‐time) JAVA
Meyer et al. Runtime code generation for interpreted domain-specific modeling languages
Nguyen et al. Retargetable optimizing compilers for quantum accelerators via a multilevel intermediate representation
Van Es et al. A performant scheme interpreter in asm. js
Chepovsky et al. Partial evaluation for common intermediate language
Kim et al. Static dalvik bytecode optimization for Android applications
Cepa et al. Language support for model-driven software development
Shahjamali An Empirical Analysis of Java Language Use in Open Source Applications
Matoussi et al. Loop aware CFG matching strategy for accurate performance estimation in IR-level native simulation

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
RJ01 Rejection of invention patent application after publication

Application publication date: 20180227

RJ01 Rejection of invention patent application after publication