我需要使用groovy chain命令设计DSL(域特定语言)。
我有以下员工数据库
Name Age Date-Of-Joining Salary
Test 24 12-aug-2015 6000$
我需要创建一个类似于: -
的DSL将名称更新为" test1" ,年龄为" 26" 等等。
问题是: - 可以更新的字段是用户定义的,即他/她可以选择,哪些列将更新及其动态。
所以: - 将薪水更新为" 7000 $"也应该有效。
是否有可能创建这样的动态dsl?如果是这样,请提供一些简要信息,以便继续进行此类设计
我已经开发了后端系统,它将更新价值。
我没有得到如何从这个动态dsl中获取值
答案 0 :(得分:1)
在DSL中,您应该了解应该更新哪个员工记录的信息(例如,在员工表中提供主键)。
你希望在你的DSL中拥有的动力在Groovy中是绝对可能的。请将此小示例视为一个起点(此示例不使用数据库来保持简单):
class Employee
{
String name
int age
int salary
public String toString()
{
"name=${name}, age=${age}, salary=${salary}\$"
}
def update(String attributeName)
{
['to': { Object value ->
this[attributeName] = value
['and': { String nextAttrName ->
update(nextAttrName)
}]
}]
}
}
Employee emp = new Employee(name: 'Test', age: 24, salary: 6000)
println emp // name=Test, age=24, salary=6000$
emp.with
{
update 'name' to 'John'
println emp // name=John, age=24, salary=6000$
update 'salary' to 7000
println emp // name=John, age=24, salary=7000$
update 'name' to 'Michael' and 'age' to 48
println emp // name=Michael, age=48, salary=7000$
}
您的DSL将是可执行代码,因此您无法提取'值但DSL会调用你的后端方法。
有关在Groovy中创建DSL的非常好的演示:Creating Groovy DSLs that Developers Can Actually Use。这个演讲讲述了很多关于DSL内部的内容。