当前位置: 首页 > news >正文

【Java后端进行ai coding实践系列】如何使用ai coding实现计划任务增删改查

文章目录

      • 开发的目标
      • 代码逻辑修改部分。
        • 原有代码片段详解.
      • 1. 编写需求提示词,让iflow帮忙开发。
      • 计划调整
      • 进一步计划调整。
      • runing and go to wc
    • 结论。

背景,尝试使用ai coding工具针对当前项目进行简单实践

开发的目标

这里有一个简单的接口开发,就是通过一个目标设置,用户可以事先存储两个值,一个是步数目标,一个是睡眠目标。

根据原先的产品逻辑,用户必须同时设置步数目标、睡眠目标两个数值。但是需求变动了,变动点是步数目标和睡眠目标不用同时设置,只要设置一个就可以了。

代码逻辑修改部分。

原有代码片段详解.

实体类

@Data
public class GoalSettingsSaveReq {/*** 目标设置ID*/@ApiModelProperty(value = "目标设置ID")private String goalSettingId;/*** 步数目标*/@NotNull(message = "步数目标不能为空")@Min(value = 1000, message = "步数目标不能小于1000")@Max(value = 65000, message = "步数目标不能大于50000")@ApiModelProperty(value = "步数目标")private Integer stepTarget;/*** 睡眠目标*/@NotNull(message = "睡眠目标不能为空")@Min(value = 1, message = "睡眠目标不能小于0.5小时")@Max(value = 30, message = "睡眠目标不能大于15小时")@ApiModelProperty(value = "睡眠目标")private BigDecimal sleepTarget;
}
@RestController
@RequestMapping("/api/v2/mr/goal/settings")
@Slf4j
@RequiredArgsConstructor
@Api(tags = "目标设置管理")
public class GoalSettingsController {private final GoalSettingsBusinessService goalSettingsBusinessService;@PostMapping("/saveOrUpdate")@ApiOperation("保存或修改目标设置")public CommonDataResponse<GoalSettingsVo> saveOrUpdate(@Validated @RequestBody GoalSettingsSaveReq request) {log.info("saveOrUpdate goal settings request: {}", JSONUtil.toJsonStr(request));String userId = GlassesContext.getUserIdByStr();return CommonDataResponse.make(goalSettingsBusinessService.saveOrUpdate(request, userId));}}

1. 编写需求提示词,让iflow帮忙开发。

提示词
com.qiuguo.server.glasses.controller.GoalSettingsController#saveOrUpdate 方法帮我调整一下,我需要调整一下字段的处理逻辑。在目标设置请求的时候允许只存在步数目标 以及 睡眠目标, 但是不允许两个都是空值。帮我调整一下。
在这里插入图片描述

在计划模式下,iflow根据当前的提示词,会根据用户的需求,先去查找文件,以及周围的代码(读取GoalSettingsController接口,比如接口的GoalSettingsSaveReq请求对象,接口的返回对象 GoalSettingsVo, GoalSettingsBusinessService,GoalSettingsService等等依赖)
可以看到这一过程是自动的,然后iflow会根据当前收集的上下文信息(包括用户提示词(提问),搜索到的代码片段),提供了一个当前的计划。

在仔细阅读该代码,可以发现,计划分了三步走。

根据您的需求,我需要调整目标设置的字段处理逻辑。目前的`GoalSettingsSaveReq`类中,`stepTarget`和`sleepTarget`两个字段都被设置为`@NotNull`,这意味着两个字段都必须有值。根据您的要求,需要修改为:在目标设置请求中只允许存在*步数目标*以及*睡眠目标*,但不允许两个都是空值。
我的计划是:                                                      1. 修改`GoalSettingsSaveReq`类,将`stepTarget`和`sleepTarget`字段的`@NotNull`注解移除,允许它们为空2. 在`GoalSettingsServiceImpl`的`saveOrUpdate`方法中添加校验逻辑,确保`stepTarget`和`sleepTarget`不能同时为空3. 如果两个字段都为空,则抛出业务异常,提示用户至少设置一个目标这样可以满足您的需求,即允许单独设置步数目标或睡眠目标,但不允许两个都为空。

很显然,以上的计划能瞒住普通的需求。

但是作为一个有过其他方案开发的经验者,我完全可以使用另一种编码方式去实现。因此搜选择了** 3.继续规划** 使用。也就是选择了如下的计划调整 步骤。

计划调整

提示词: 校验的过程我使用 Java Bean Validation提供ConstraintValidator定义自定义校验,来实现检验逻辑。帮我重新规划一下。

计划回复。
在这里插入图片描述

根据您的需求,我将使用Java Bean ValidationConstraintValidator来实现目标设置的校验逻辑。目前的`GoalSettingsSaveReq`类中,`stepTarget`和`sleepTarget`两个字段都被设置为`@NotNull`,这意味着两个字段都必须有值。根据您的要求,需要修改为:在目标设置请求中只允许存在*步数目标*以及*睡眠目标*,但不允许两个都是空值。我的计划是:
1.  创建一个新的自定义校验注解`@ValidateGoalTargets`,用于校验目标设置请求中的步数目标和睡眠目标
2. 实现一个对应的校验器`GoalTargetsValidator`,继承`ConstraintValidator`接口,确保`stepTarget`和`sleepTarget`不能同时为空
3. 在`GoalSettingsSaveReq`类上添加这个自定义注解,移除原有的`@NotNull`注解
4. 在校验器中实现具体的校验逻辑:- 当`stepTarget`和`sleepTarget`都为null时,校验失败- 当至少有一个字段有值时,校验通过
5. 添加适当的错误提示信息,告知用户至少需要设置一个目标这样可以满足您的需求,即允许单独设置步数目标或睡眠目标,但不允许两个都为空,并且使用了Java Bean Validation的标准方式来实现

基本上看以上的描述,基本功能已经基本上满足了我的需求。但是,一个很重要的问题是,计划调整只是添加了简单的校验,但是并没有帮我调整业务逻辑,也就是后续的service具体实现,因为字段的变更,可能会影响业务逻辑。所以,我仍然选择了** 3.继续规划** 使用。也就是选择了如下的进一步计划调整 步骤。

进一步计划调整。

提示词:

同时帮我添加一个非常重要的步骤,在修改了校验之后,还需要调整业务逻辑,帮忙看看需要调整哪些业务逻辑。
回复:
在这里插入图片描述
计划回复

根据您的需求,我已经完成了对目标设置校验逻辑的规划,具体包括以下几个方面:1. 创建自定义校验注解@ValidateGoalTargets:定义一个新的注解用于校验目标设置请求中的步数目标和睡眠目标。
2. 实现GoalTargetsValidator校验器:实现一个继承ConstraintValidator的校验器,确保stepTarget和sleepTarget不能同时为空。
3. 改GoalSettingsSaveReq类:移除原有的@NotNull注解,并添加自定义的@ValidateGoalTargets注解。
4. 检查并调整GoalSettingsServiceImpl中的业务逻辑:确认该类中的saveOrUpdate方法不需要额外的校验逻辑调整,因为校验将由Java Bean Validation在Controller层自动完成。
5. 检查并调整GoalSettingsBusinessServiceImpl中的业务逻辑:确认该类中的saveOrUpdate方法不需要额外的校验逻辑调整,因为它直接调用DaoService的方法。
6. 检查Controller层:确认GoalSettingsController中的saveOrUpdate方法已经使用了@Validated注解,能够自动触发Java Bean Validation。
通过以上调整,我们可以实现目标设置的校验逻辑:允许单独设置步数目标或睡眠目标,但不允许两个都为空,并且使用了Java Bean Validation的标准方式来实现。这样既满足了业务需求,又保持了代码的一致性和可维护性。 

看了一下,基本上没有大毛病了,那么我们就开始让ai帮忙写一下代码吧。请选择是,使用 yolo 模式编辑,请去上趟厕所。回来就会给我一个非常好的答案了。

这里提示一下,其实还有一个功能需要添加这里方便演示我就不做下一步操作了,核心的步骤[测试],“”" 请给我添加一个测试用例。“”"

runing and go to wc

最终回复
在这里插入图片描述

show my code
在这里插入图片描述
在这里插入图片描述

public class GoalTargetsValidator implements ConstraintValidator<ValidateGoalTargets, GoalSettingsSaveReq> {@Overridepublic boolean isValid(GoalSettingsSaveReq goalSettings, ConstraintValidatorContext context) {// 检查stepTarget和sleepTarget是否都为空if (Objects.isNull(goalSettings.getStepTarget()) && Objects.isNull(goalSettings.getSleepTarget())) {// 如果都为空,校验失败context.disableDefaultConstraintViolation();context.buildConstraintViolationWithTemplate("至少需要设置一个目标(步数目标或睡眠目标)").addConstraintViolation();return false;}// 如果至少有一个不为空,校验通过return true;}
}

@Constraint(validatedBy = GoalTargetsValidator.class)
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidateGoalTargets {String message() default "至少需要设置一个目标(步数目标或睡眠目标)";Class<?>[] groups() default {};Class<? extends Payload>[] payload() default {};
}

很明显,ai flow已经帮我实现了功能,我只要看一遍就可以了。

结论。

在现实场景下ai coding目前仍然是一个需要靠经验(个人开发,领域经验),去开发的。当我们把问题描述地的确很精细的时候,【考虑开发过程中的并发,事务,等等,技术方案】,都需要经过历年的经验,希望以此篇致敬ai coding。希望以后能够越做越好。

这一篇是我的一个新的开始吧,后续我可能会根据自己这几个月来对ai coding的实践进行进一步梳理,也希望大家在开发的过程中出现的问题一起沟通,学习。

还有一个比较有趣的ai coding编码时间是,请看看从RTSP到HLS:构建一个简单的流媒体转换服务(java spring 这篇文章,这个项目也是由ai 完全开发的。这个过程挺有意思的,希望与大家共勉。

http://www.dtcms.com/a/538160.html

相关文章:

  • 哪些网站可以做淘宝客盟威软件快速开发平台
  • 美工培训机构seo技术培训价格表
  • 《小白学随机过程》第二章:常见的随机过程——详细解读马尔科夫决策过程MDP和强化学习(2 值迭代和策略迭代 附python代码
  • 济源城乡建设局网站最全的wordpress 中文手册
  • 苏州网站设计kgwl网站加入wordpress
  • 温州专业全网推广建站公司杭州国外网站推广公司
  • 建工厂网站的公司艺麟盛世可以做网站推广吗
  • 2023年电商平台排行榜seo标签优化
  • 安徽省建设厅网站工程师查询网红营销对消费者行为的影响
  • 山东省聊城建设学校网站网站建设实习内容
  • 自己做的网站实现扫码跳转知名企业网站搭建
  • 阿里云网站建设详细教程精品课程 网站建设质量
  • web自动化测试-selenium-03_下拉选择框、弹出框、滚动条操作
  • 北京大龙建设集团有限公司网站wordpress主题 学校官网
  • 好的结构设计网站wordpress 有趣的插件
  • 做电商哪几个设计网站比较好移动互联网应用程序备案
  • Orleans 自定义二进制协议在 TCP 上层实现的完整过程
  • 宁波网站建设工作室重庆手机网站制作价格
  • 那个做图网站叫什么贵州做网站怎么推广
  • PostgreSQL认证含金量如何?适合哪些人?
  • ZSet 与实时排行榜:从应用到原理的深度解析
  • 网站获取访客手机号源码百度软文推广公司
  • 辽宁省建设厅网站河南网站建设工作室
  • html5电影网站源码php网站开发费用清单
  • 湖北微网站建设多少钱品牌网站建设美丽
  • 龙华品牌网站制作公众号 上传 wordpress
  • 吉林市网站建设公司做网站哪里学
  • 宁波英文网站建设国产wordpress模板
  • 28-4.1继承
  • opencart网站国外wordpress电影模板