Comments (7)
你好, 我们项目也碰到这个问题, 正在考虑如何完整实现这种需求
你可以将你们的需求再多提供一些, 这样可以方便我总结实现
from tabtoy.
结合之前项目的需求, 也再和我们策划谈论了下, 数值策划在配置的时候,往往会有如下问题
- 简单的验证,如已经实现的RepeatCheck、MustFill等, 如简单的数值范围判断(血量在0-1000,掉落权重在0-10000),复杂可以考虑用正则支持?
- 跨表的外键检查(也就是主贴中的需求), 物品ID之类往往需要配置在其他表(合成表,掉落表)中, 但是如果是配置了不存在的物品ID又会造成逻辑错误, 所以这边需要有这个需求ForeignKey:"Item.ID"来配置关联
ID | ItemID | BuffID |
---|---|---|
int32 | int32 | repeated int32 |
RepeatCheck:true | MustFill: true ForeignKey:"Item.ID" | ForeignKey:"Buff.ID" |
1 | 11 | 22 |
- 还有一种更复杂的需求,不过感觉没必要在表格中引入这层关联, 这边也举个例子: 战斗系统中, 往往会有很多的技能效果(固定数值回血、按体力上限比例回血,回血buff等等),每种效果当作一个独立的类型, 则每个效果都会有不定项的参数约定:
ID | name | params |
---|---|---|
int32 | string | repeated string |
1 | 固定数值回血 | 1000 |
2 | 按体力上限比例回血 | 20% |
3 | 回血buff | 3;10%(持续3回合,每回合10%) |
4 | 回血buff | 4;20%(持续4回合,每回合20%) |
这样在配置表的时候, 往往还需要有个效果对应参数的文档来配置,很容易漏掉某个参数,或者应用错参数格式
from tabtoy.
兄弟, 你跟我想的差不多, 特别是外键这个概念, 非常正规
以下是我对这个功能的设想:
与@types表单一样, 这个功能也会使用嵌入的独立表单实现, 叫@verify吧
大概这样验证:
规则名 | 条件 | 字段 | 条件值 |
---|---|---|---|
圆形攻击范围匹配 | 单元格值存在 | Skill.AreaType | 圆形 |
圆形攻击范围匹配 | 单元格值存在 | Skill.AreaParam.Radius | |
圆形攻击范围匹配 | 单元格值范围约束 | Skill.AreaParam.Radius | 0<value<10 |
直线攻击范围匹配 | 单元格值存在 | Skill.AreaType.Line | |
直线攻击范围匹配 | 单元格值存在 | Skill.AreaParam.Width | |
直线攻击范围匹配 | 单元格值存在 | Skill.AreaParam.Height | |
角色限定攻击范围 | 单元格值等于 | Actor.Type | 战士 |
角色限定攻击范围 | 枚举约束 | Skill.AreaType | 圆形 |
逻辑:
- 规则名相同的视为一组规则
- 同组规则内, 通过选定不同条件与目标单元格进行匹配检查
- 同组匹配关系从上到下
- 同组每一行规则关系为与关系, 就是必须都满足
看看是否能通用你的需求
from tabtoy.
@davyxu 需求上是能满足的, 这样做相当于是实现了多层的验证。
不过如果是对某个字段的简单的规则验证, 是不是放Meta中会更好? 策划在配置的时候也能看到这层约束, 而不需要再去另外的表单中对照? 当然,如果是自定义类型的验证是需要放@type或者独立的@Verify中
from tabtoy.
其实我也希望这样, 但是几个字段的验证, 你写哪个字段呢?
我会给字段加上独立于验证系统的范围验证, 类似于MustFill这种, 简单验证用这个就可以
复杂验证, 再使用这个表就可以
from tabtoy.
嗯, 的确, 目前来说常用的也就针对单字段的简单验证(MustFilll,Range[1,100]。。)以及ForeignKey,复杂验证需求相对低, 引入@verify也蛮好的。
from tabtoy.
这个功能我们已经在项目中改为使用golang代码来实现
我们在项目中有一个table包, 里面有tabtoy输出的代码和一些手动检查表格正确性和构建静态数据的代码
在导表时, 运行一个独立的go文件编译table包来读取导出的json文件并检查内容
这样做灵活度比在导表工具内高很多, 也无需学习. 而且与项目整合的也很好
建议使用这种方法替代新功能制作
from tabtoy.
Related Issues (20)
- 存在多张 KV 表时 C# 导出格式错误 HOT 1
- v2版本对象中的字段是否可以是数组? HOT 3
- 可以支持同一个excel中多个sheet吗 HOT 3
- 导出.proto描述文件时,能否将表头的标识名也注释在字段后面 HOT 1
- TT201 错误,“value碰到字符串时, 需要用双引号括起来”,还是会报错 HOT 2
- V2版本编译linux 的方法 HOT 1
- 直链github使用go get 报错 HOT 4
- 请问支持多主键吗? HOT 1
- 申请数组切割符支持多个字符进行切割 HOT 2
- 使用protobuf方式,生成的代码文件,无法以O(1)或map的方式存取;因为相关的数据结构是数组的
- 数据表中只支持枚举标识名和字段名,是否可以增加对枚举值的支持
- cannot find the file specified
- 导出lua时的转义符处理问题
- v2 ColumnMajor_ColumnValue should is 5 HOT 1
- (C#)导出时将枚举定义中的标识名作为enum的description属性? HOT 1
- 删除数据表里某一列,但是Type表里忘记删对应字段,不会报错,而且还能导出删除列的字段 HOT 1
- go导出文件报错 HOT 3
- 能否提供一个V3结构体的例子 HOT 7
- 生成go文件的bug? HOT 4
- 请问表格中标记列的标记有没有解释? HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from tabtoy.