`
白色毒药
  • 浏览: 4577 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

groovy dsl——配置数据驱动

阅读更多
已经习惯于用json来配置一些数据,因为json能够被大多数语言支持,尤其在录入的时候,js操作非常的方便。但,仍然有些问题,从配置数据生成想要的对象,代码上仍然要做一些工作,尤其在配置数据本身具有一些规则的时候,额外的工作就更多因此尝试使用dsl的方式替换部分的数据配置。由于groovy和java无缝的互操作性,因此使用groovy作为宿主语言。
groovy的dsl有几种惯用的模式,以下采用的是 category和missing method混合的方式

配置的格式如下:
boss1 {
     职业 "魔法师"
     成长 'A', 'B', 'B'
     技能 "火炎":4, "冰霜":3, "落雷":3
     
     升级 40
     增加魔力 20
}

java代码最终调用的是 makeBoss('boss1'), groovy代码定位并执行 boss1 的闭包, boss闭包接受一个boss对象,在闭包内部修改 boss 数值

boss闭包执行的代码为:
Closure boss = findBossClosure(bossName)
boss.delegate  = bossObject
boss.call(bossObject)

这样闭包执行到 职业,成长等方法的时候,就会去调用bossObject的方法。

但由于 bossObject 是一个java 对象, 因此向它添加新方法就需要利用到groovy的动态性,也就是使用 category的方式。如 职业,成长等方法,因此代码变为:
use (BossHelper) {
     Closure boss = findBossClosure(bossName)
     boss.delegate  = bossObject
     boss.call(bossObject)
}

最后要做的是 boss1 方法的动态定义,这个需要用到 missingmethod
def methodMissing(String methodName, args) {
        boss(methodName, args[0] as Closure)
}

这里假设不存在的方法调用都是boss类方法,这样 boss1方法实际上变成了 boss('boss1', closure)
需要注意的是,methodMissing的参数格式要严格书写,否则groovy不会认为是个methodMissing方法

相比原先json的配置方式,有三个优点:
  • 1. 数据脚本化,通过使用一些简单的预定义规则,数据配置的适应性更强
  • 2. 把部分逻辑从代码推向数据,从而能够使常变动的内容在配置层面处理掉,而不需要更改数据处理代码的逻辑
  • 3. 动态可控,通过category的方式,动态性局限在指定的范围内,不会扩散

缺点也有:
  • 1. 少了数据的处理代码,但是多写了向dsl暴露的接口和实现
  • 2. 需要额外的增加脚本验证功能,我指的是想数据配置人员提供的工具
  • 3. 可能会受不了诱惑而使数据配置功能过多而失控
  • 4. 不得有边际效应



分享到:
评论

相关推荐

    Groovy DSL 动态规则(rule)执行引擎流程引擎特色风控系统规则引擎动态接口配置(低代码)

    特色 风控系统, 规则引擎, 动态接口配置(低代码)Groovy DSL 动态规则(rule)执行引擎。DSL(特定领域语言): 开发 和 业务 共识的语言。方便业务表达需求, 方便开发理解业。一个业务需求(一般程序或一个接口)可以抽象...

    Groovy DSL

    例如,Groovy可以通过定义新的语法结构来创建一个用于配置应用程序的DSL,这样不仅减少了编写常规配置文件的工作量,还增强了代码的表达力。 #### 使用Groovy构建DSL的优势 1. **代码量减少**:通过定义特定领域的...

    Groovy DSL 动态规则(rule)执行引擎

    Groovy DSL动态规则执行引擎是一种基于Groovy语言的领域特定语言(Domain-Specific Language)来构建规则引擎的解决方案。这种引擎特别适用于流程控制、风险管理系统以及动态接口配置,特别是那些需要快速迭代和低...

    用Groovy实现DSL领域定义语言

    在groovy中实现DSL领域特定语言的技术。 版权声明: 本系列文章是从原著《Groovy For Domain-Specific Languages》(原作者: Fergal Dearle)中翻译而来,从中加入了一些本人自己的读书笔记和理解。本系列文章不为...

    groovy 一个不错的文档 实现dsl

    - **配置文件**: 使用Groovy作为配置语言,如Gradle构建脚本中的Groovy DSL。 - **测试框架**: 如Spock框架使用Groovy实现的BDD风格的测试DSL。 - **应用开发**: Groovy可以用来创建内部DSL,用于简化复杂系统的开发...

    groovy-dsl:创建Groovy DSL

    Groovy DSL的实例广泛应用于各种领域,如构建脚本(Gradle)、配置文件(Grails配置)、测试框架(Spock)等。在Grails框架中,Groovy DSL被用来简化Web应用的开发,例如,控制器定义、视图创建等都可以用简洁的DSL...

    groovy-ssh, 在 Groovy DSL上,基于SSH自动化工具.zip

    groovy-ssh, 在 Groovy DSL上,基于SSH自动化工具 Groovy SSH是基于DSL的自动化工具,提供远程命令执行和文件传输。https://gradle-ssh-plugin.github.io捐赠这是一个在Apache许可以版 2.0下许可以的开源软件。 欢迎...

    Android-从Groovy转换为KotlinDSLforGradle专注于Android

    Groovy是早期Gradle构建系统的主要语言,而Kotlin DSL(Domain Specific Language)则是近年来逐渐流行的趋势,特别是在Android开发中。Kotlin DSL提供了更简洁、类型安全的构建脚本,提升了开发效率和代码可读性。 ...

    Groovy和Grails配置方法

    ### Groovy和Grails配置方法 #### 一、Groovy与Grails简介 Groovy是一种强大的面向对象编程语言,它运行在Java平台上,并且能够直接与Java代码进行交互。Groovy支持函数式编程特性,拥有丰富的语法糖以及简洁的...

    Groovy轻松入门——Grails实战基础篇

    ### Groovy轻松入门——Grails实战基础篇 #### 搭建Grails环境及创建Grails Demo程序 **Groovy**是一种面向对象的编程语言,它运行于Java平台上,能够与Java代码无缝集成。而**Grails**则是一款基于Groovy的高性能...

    groovy-dsl-talk:关于在Groovy中创建DSL的闪电演讲

    Groovy DSL 关于利用Groovy支持特定领域语言的闪电演讲 资源 演示幻灯片: :

    Groovy need not rails——介绍自己写的一个基于groovy的框架,Webx

    2. **DSL支持**:Groovy的强大之处在于其领域特定语言(DSL)能力,Webx可能会提供一套内建的DSL,让开发者能以更简洁的方式定义路由、操作和视图。 3. **自动化工具**:基于Groovy的框架通常会包含一系列自动化...

    vertx-web-groovy-dsl:简单的Groovy DSL声明Vert.x Apex路由

    vertx-web-groovy-dsl Groovy DSL声明Vert.x Web路由 如果您使用Groovy,则本项目旨在提供另一种方法来使用vert-web定义网络路由,这种方式更具Groovy风格。 最有趣的功能是能够使用嵌套闭包以嵌套方式声明路由器...

    groovy-docker-dsl:Docker 的 Groovy DSL(想想 Fig 的健康检查和更改容器的重启)

    Groovy Docker DSL 使用 Groovy DSL 思考 ,您可以实现钩子、健康检查和监视包含 Dockerfile 的文件夹以进行更改,并根据需要自动重新构建和重新启动容器。 动机: Fig 很棒,但我需要一些可以让我做一些事情的...

    infra-dsl:用于基础架构的Groovy DSL

    红外DSL 用于Terraform的Groovy DSL。 干净,简单的方法来定义代码中的基础结构。不久将有更多描述。 享受下面的示例:) java -jar infra-dsl-VERSION.jar path_to_your_file.groovy Infrastructure . resource...

    spring-boot-groovy-config:使用Groovy文件配置Spring Boot应用程序

    这不仅允许以时髦的DSL方式指定属性,而且还允许(小的)逻辑并在配置内部重复使用(请注意,配置中的复杂逻辑通常不是一个好主意,但是在某些情况下,动态计算的值(例如端口号)在其他情况下可能很麻烦配置)。...

    Groovy.for.Domain.Specific.Languages.pdf

    书中通过多个实际案例展示了如何使用Groovy构建DSL,涵盖了配置管理、数据处理、Web服务定义等多个方面。例如,通过Groovy可以创建一个用于配置数据库连接的DSL,简化了原本繁琐的XML配置文件,提高了配置的灵活性...

    最新 groovy开发包

    5. **Spock测试框架**:Groovy还有一个流行的测试框架——Spock,它提供了一种声明式的、行为驱动的测试风格。Spock的语法清晰,使得测试代码更易读,且支持数据驱动测试和断言。 6. **Groovy Shell和Groovy ...

Global site tag (gtag.js) - Google Analytics