一、明确需求概况
1.首先要有一个大致的实现功能的方向,描述需求:
问:这个是APIpost的分享功能,不论是公开模式还是密码模式,外网链接都是一样的,
但是打开页面的效果不同。是在网关上做的判断处理的嘛?
给出了大致的需求理解描述:
2.询问解决方案
①一种是,按照AI的思路继续询问这几种方案的具体解决思路。
②还有一种,是有明确的思路,然后再进行方案的实现。
问:
想要实现这个业务,还有什么好的办法办法吗帮我想想
AI回答:
实现你所描述的业务需求,除了使用AOP和自定义注解的方式之外,还有几种其他的方法可以考虑。这些方法各有优缺点,可以根据你的具体应用场景选择最合适的一种或多种结合使用。
(1) 过滤器(Filter)或拦截器(Interceptor)
实现方式:你可以创建一个自定义的HandlerInterceptor或Filter,并在其中根据请求URL或其他参数判断是否需要密码验证。
(2) Spring Security
实现方式:可以通过配置Spring Security来保护特定的端点,并根据数据库中的状态决定是否要求额外的身份验证步骤(例如输入密码)。
(3) 前置处理器(PreProcessor)
实现方式:可以在每个需要检查接口状态的方法前添加一段通用的逻辑(例如调用一个服务方法来查询接口状态并根据结果执行相应操作),但这种方式不利于代码复用和分离关注点。
(4) 事件驱动架构
实现方式:在接收到请求时发布一个事件,然后由监听该事件的组件来处理逻辑(如查询数据库并决定是否需要进一步验证)。这种方法特别适合那些需要多个系统间协调的工作流。
二、初步实现思路
花了一点时间搭springboot框架,想用基础的springboot+html形式实现demo。
需要明确具体的产品设计思路:
首先分享功能,肯定是要有分享内容的,可以是一个分享链接;并且链接打开后,是一个通过接口查询获取数据的页面。我们需要有一个index首页,然后还要有一个可分享的页面。让AI帮忙生成HTML:
1.生成index首页
问:
首页的html给一下要样式丰富一点的,内容很多的首页,虽然按钮都可以不使用,但是要显得功能多一点,样式好看一点。
AI:
给出了一个轮播图的页面
问:
不用轮播图了,改成一个统计大屏吧
AI:给出一版样式,但还是很丑
问:
样式更多一点起码要加10倍的样式,让这个首页更漂亮
AI:给出了一个完整的html,但是需要很多图片,得把图片的路径都配好才行。
并且只有部分代码,没法直接打开的html。
问:
样式更多一点起码要加10倍的样式,让这个首页更漂亮,只用样式不要用照片
(给出完整的首页代码)
最后得到了一个有四个模块的index.html的首页:
经过来回沟通和微调,加了jquery,最终拿到了想要的首页效果:
2.整理询问思路和方法
(1)问题描述
①具体的问题尽量在一句话中讲明白:
在一句话中将需求,尽量详细的全部描述清楚,提问的限制是10000字符,不要担心太长。但是一个会话描述太多内容会特别卡顿,可以先按照以下格式在文档中整理好问题,然后粘贴询问。
询问请求格式,例如:
A描述想要的需求或Bug问题,B接口路径,C接口的请求参数格式,D提供接口返回数据格式,E使用的请求方式Post
+ 代码段......
在代码基础上修改,不要去掉注释,修改bug,给出完整代码。
(原逻辑保持不变的地方也要展示出完整代码,不要有任何省略,请不省略代码)
②拆开问提供描述
先发一部分,工具类或者代码。让AI理解下自己下项目结构和使用方法或工具,
可以在下文两三句中询问具体问题。总体来说一个问题拆开几句询问弊大于利。
优点:模型会在后文中偏向你提供的方法和工具的使用。
缺点:会出现了模型答非所问的情况。
通常打开一个新的会话后,模型会理解当前会话的上下文进行内容回复,但是所提的问题中,如果内容过长,或包含大量代码。
AI通常会解决代码中的一部分问题,而省略一些代码。也由于描述太长,而回复时候模型大概率,不会思考两个以上前文所提供的方法或工具信息,不记得对话内容而进行回答。
(2)前端页面生成总结
有些微调部分AI给出的结果并不是很理想,AI给出的页面有很多bug,比如页面打开后统计图不断向下拉伸放大的死循环等等......
较难用语言描述前端代码的微调,比如想把按钮向右挪动10%、宽度拉长5%、左右的按钮对齐,按钮中的文字不要换行,每个统计模块缩小比例等细枝末节。
所以页面的微调部分,虽然也可以完全依托给AI生成,但是就效率而言,对于前端代码来说,有些地方可能手动调试更方便。还有对使用的语言越熟练,最终拿到想要的结果就越快。
(3)点击停止中断AI的答案
AI生成回复需要时间,中断不必要的回复,这样辅助开发的效率:
--如果发现AI回复的内容开始有偏差;
接下来一问,需要纠正AI偏差的地方,并且需要表达出自己想要的效果。
不然AI在接下来的回复会越偏越远。
(4)模型中断的回复追问
如果出现代码行数过多,问题未回答完毕。而中断回复的情况,可以追问后续:
(5)多线程提问
代码的调试或bug修改,很难绝对保证一次会修改完美成功:
针对复杂度中等以下的场景,可以在等待回复的过程中,在文档中继续整理接下来要处理的需求内容,进行下一次沟通的准备。这些会话是互不影响的。
模型在回复问题的过程中,需要时间输出结果。如果贴的是代码,可能回复时间稍长,基本在3-5分钟左右。在这个过程中,可以打开其它页面,新建多个会话进行不同需求的提问。
例如,有两个需求要处理:
①修改项目的bug,搜索条件查询返回失败500异常。
②新接口已经理解需求,待开发。
(或者在一个项目中,有两个业务不交叉的功能待开发)
解决思路:
①问:
搜索条件查询返回失败500异常,请求参数为xxx
+贴业务代码......
+贴部分日志报错信息......
在代码基础上修改,不要去掉注释,修改bug,给出完整代码。
(回复等待......5分钟,AI的代码回复+描述)
②问:
请帮我以这样的格式:
贴部分实体或controller或service代码格式代码....
生成几个接口实现:xxx(具体需求描述)
以下是我的数据库结构:贴SQL的创建表语句。
PS:在等待回复的过程中,可利用等待时间做别的事情。假如问题①需要沟通3次后才,能改好正常运行。整理更多的需求描述内容,待提问使用。
3.后端代码生成
(1)数据库
共三张表:
①我自己提供了一个100条数据的customer用户表,用来展示用户量统计图。
②一个核心功能的表share_links用来存储“分享链接”和“分享密码”等信息。
③后续为了实现白名单功能,又加了一个allowed_ips存储“白名单IP”。
以share_links为例,因为当时没有明确的想法:
问:
点击分享后弹出一个弹窗 有两种模式可以选择,一种是公开, 一种是密码,意思这个可以分享的页面,分享出去后,当有用户打开此地址时,是不是要先输入密码再进入。这个逻辑怎么实现,要新创建一个表吗
AI:
最后在这个SQL基础上,调整:
添加了字段:`redirect_address` varchar(500) NOT NULL COMMENT '重定向地址';
调整了create_time和modify_time字段,使用了此表。
PS:用过往设计数据库的思维经验,微调模型给出的SQL,能加快数据库设计。
(2)实体类
需要提供一个基础的实体类格式,模型会根据注释格式生成想要的实体类。
后续只需要描述:以此格式,生成以下表的实体类,将表SQL全部贴到后面一次性生成5个、10个实体类,可直接使用。
问: AI:
(3)接口
问:
首先要创建好目录结构,这个手动比AI生成的快,并向模型提供这个目录结构
AI:
接口生成描述:
后续只需要通过描述Service层接口,还有想要实现的接口功能。逻辑描述的越具体得到的接口就越准确,如果能先写Service的一行抽象方法,可以更准确的返回结果,没有写也无所谓,根据生成后的代码进行微调,可一次返回全部结果。
比如可以这样描述:
希望有一个查询用户列表的接口,用mybaits-Plus实现,可通过参数姓名、手机号、身份证,居住地的省、市、区模糊查询。以格式:+贴代码段....的注释方式来实现功能;Controller层请使用我的返回数据工具类实现;返回数据工具类为:+贴工具类代码;格式以:贴简单接口的Controller接口格式;给出完整代码,不要有代码省略。
4.实现生成分享设置密码功能思路
问:前端用户时没办法知道id的,他应该只能取到targetUrl;
之后,又针对这三个接口进行了一系列的优化操作,比如让模型将具体业务逻辑放到impl去处理,通过本地ApiPost联调修改了接口的BUG。调整为mybaits-plus的查询方式,优化为jdk1.8支持的语法格式等。
先在首页生成一个类似的模态框;
因为没有具体想要的样式,模态框效果的概念,
从而花很长时间生成样式,来回调整,最终才得到这个效果。
通过和AI模型的交流,在将shareLinks链接表的数据展示到模态框,并且关闭模态框可以保存后,就有了一个比较清晰的思路,然后与模型沟通一点点完善后:
1.在首页设置分享,创建分享数据。
2.当我设置密码和有效期后时,
在打开分享链接页面userGrowth.html后,因为分享页面打开是个指定的页,所以要统一模态框和跳转页面的接常量参数/api/dashboard/user-growth;
点不同的模块,会保存不同的常量数据。最终再跳转页面中处理逻辑。
3.例如:在userGrowth.html页中会根据常量,查询接口是否有链接密码shareLinks表的数据;如果有判断有效期,并跳转密码页verifyPassword.html;
4.分享过期,跳转到密码失效页面linkExpired.html;
5.在密码页verifyPassword.html输入密码,跳转回到userGrowth.html进行验证,验证失败跳转回密码页面重新输入。
6.最后为了解决,访问权限的问题,设计了白名单功能,在userGrowth.html,判断添加过白名单的ipv4地址不需要验证密码页。
5.前后端接口联调
联调描述使用:
前端页面调用接口有:页面跳转,监听器,接口调用等。有时候贴全部代码10000字符贴不下。可以只粘贴方法调用部分,例如html只贴script部分的代码,并描述:接口地址、传参数据和格式、返回参数的格式,以及想要的页面效果,加上:给出完整代码的描述。
有时候即使加了“给出完整代码”,模型返回的结果还是会省略一部分。这时可以用不同的描述语言,来提醒模型识别,例如:希望返回全部结果、返回的代码不要有任何省略,要展示出完整代码,随描述的不同,会绕过模型代码的判断省略逻辑。