本文面向技术人员阅读,非技术人员不一定能看懂全文。

昨天晚上花了2小时,用cursor完成了一个轻量级web框架开发,着实让我惊叹到了,效率惊人, 代码质量非常高,注释清晰、结构合理、文档完善,直接可以达到拿去开源的水平了。

背景

先说下背景,本人是一个据有多年开发经验的老鸟,虽然谈不上大佬,但是的软件开发上也是拥有一定的经验,前后端、python、java、golang都会一点,也做过几年的架构,所以用cursor开发框架,我能描述我所需要的东西。

同时,有个项目需要,在一个业务管理平台,需要管理和采集边缘侧的设备信息,需要部署边缘侧软件,与管理中心通信,并且采集边缘侧设备数据,具体的需求不展开了,我归纳总结下,就是需要一个边缘侧软件服务,能与中心侧进行http通信,同时和设备进行TCP通信,同时这个边缘侧也有简单的web页面进行管理,也希望比较轻量级的服务。不希望采用springboot这种比较重的框架来做,做过一些调研,要么采用vertx框架(java系)、要么采用golang实现这两方式,考虑到vertx功能比较多,学习成本比较高,而golang开发的后续维护人员不一会golang语言。

所以有想自己造个轮子的想法,基于netty撸一个比较轻量级的web框架,翻了开源界的,有是有几个现成的,但是看着star只有两位数的,不太敢用(稳定性、bug等各方面考虑)。

所有有计划自己撸一个。

netty还是比较熟悉,曾用它做过淘宝的图片服务器,性能上那真是杠杠的。虽然技术方案和实现,自己心里都很有底的,但是感觉肯定也会有bug出现。

正好前段时间cursor刚出来时,体验了下开发一个chrome插件,感觉很省力,最近又看了下网上不少不懂技术的人也开发出来产品,了解了一番,感觉用这个工具来帮完成这个开发应该能行地通。

要求

近半年也陆续学习了些AI知识,花了半天了解下别人使用cursor的心得,依据我的理解,说下使用cursor入门要求:

  • 对于业务功能性的产品开发,也就是直接终端用的产品,比如APP、小程序、网站、桌面应用等等之类的,最好有产品经理的思维,一句话,你能描述清楚你想要的是什么产品功能,其实这个门槛很低的,把产品功能列出来,业务和逻辑上能走通就行了。

  • 对于技术性产品,OK,这个网上案例应该比较少,今天我的这个案例就是技术性产品,需要你本身是一个技术人员,最好有抽象和架构能力的技术同学,产品用户往往是开发人员,需要你能抽像描述清楚各技术维度的要求和功能。

行动

基础入门

了解cursor的基本用法、使用注意点,技巧,基本上花半小时就差不多了 ,cursor真的是针对小白一样用户使用操作,如果你使用过chatgpt等AI聊天工具的人(我相信大部分网民多少都有用过了吧,不过真落后了),会写基本的prompt 那最好了。

cursor的基本用法,可以访问这儿《Cursor教学》花10分钟看下就行了。

怎么写prompt,可以参考这个文章《一文学会Prompt(提示词)编写技巧

第一步,设定系统规则

详见文档:《Cursor编写一个技术产品的System Rules

第二步,写提示词

说实话,三个小时完成框架开发,其中花费我最多脑力的就近一个小时编写了需求的提示词,直接贴出来了,有需要的可以参考:

<div id="code-lang-markdown"><p><code data-highlighted="yes"><table><tbody><tr><td><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
</pre></td><td><pre>你是一名具有20年经验极其优秀的架构师,精通所有编程语言,对基础软件框架建设有特别的心得,特别在安全性、稳定性以及高性能上有着丰富的经验。

我们目前新建了一个web框架项目,叫tiny,你现在正在这个项目的根目录,请帮助我完成这个框架的开发。

## 框架的功能说明

1、基于Netty框架,实现轻量级的Web框架,启动占用资源少,系统响应速度快,运行稳定;

2、支持HTTP请求和响应,支持按http请求uri路由,使用框架的开发用户可以在路由配置类里面容易地增加路由,然后根据路由可以开发具体的业务功能;

3、支持在application.yaml文件里面配置全局的变量,比如在实现具体功能时的业务变量,系统启动后,初始化为全局appcontext,在任何功能实现可以使用变量;

4、支持引入SQLite作为本地数据持续化存储,并有方便访问SQLite接口配置;

5、支持TCP长连接,该框架后续将会与物联网设备建立长连接,由设备发起TCP连接请求,建立连接后,该框架上的业务功能实现,可以通过TCP连接请求设备,拿到业务需要的数据或者下发指令;

6、支持对外请求响应的拦截处理,方便后续功能开发上扩展增加处理类(例如鉴权判断);

7、支持前端静态资源文件集成和访问(包含图片、css、js、html等前端工程编译后的内容,放在框架的static目录);

8、支持本地关键数据缓存功能(list、map等);

9、支持http服务端口配置,支持tcp端口配置;

10、运行时支持外部http请求心跳检测;

11、支持日志打印

## 技术选型

1、采用maven管理工程;
2、使用java语言,基于netty框架开发,尽量少引入其他依赖,必要引入时需要用户(我)来确定;
3、保持java通用的目录结构(包括不权限于pom.xml位置、src文件夹、resource文件夹、static文件夹);

## 非技术性要求

1、之所以没有使用业界上的现有web框架,主要是太重了,希望基于netty实现一个启动占用资源少,系统响应速度快,运行稳定的轻而小的web框架,后续用于运行在物联网边缘侧设备上;

2、请做好代码注释,方便框架维护者后续可以修改,同时方便开发者用户知道怎么使用框架;

3、因netty框架使用,在不同业务场景下,配置的netty参数不同,以发挥最佳性能,请提供三套相关参数配置建议(低并发请求量场景、普通并发请求场景、高并发请求场景)

4、框架的java包以com.benzhitech作为开头

## 其他要求

1、实现以下功能 demo:

- 有前端页面
- 有http接口请求
- 收到http请求后的处理
- http处理中访问数据库
- 收到tcp请求后,建立tcp连接,并能使用tcp连接通信

2、 请把你的设计思路、原则、实现过程完整地写入到readme.md文件中

3、完成框架开发时,请写一份框架使用说明文档放在根目录
</pre></td></tr></tbody></table></p></div>

第三步,丢给cursor开始工作

打开compose界面,把上面提示词丢给它,然后它就开始工作了:

Cursor会把任务拆解,然后按拆解后的任务开始一个个做,每做完一个,会让你确定是否认可。你可以拒绝让他重新生成代码,也可以提出建议让他修改。

注意事项

  • 交互过程中的建议与任务进度管理

    在我们合作的过程中,有时我会基于某些功能或需求提供看法和建议。这些建议可能会暂时打断正在进行的任务。为了确保我们能持续有效地推进工作,请记得在收到建议后,适时地回顾之前的聊天记录,以帮助你重新连接到原来的开发进度上。

  • 开发任务与进度的文档化

    请确保将所有的开发任务和相应的进度更新写入task.md文件中。这样做不仅有助于跟踪项目的进展,也能为团队成员之间的沟通提供便利。aaaaaa

3、因为我网络有过中断,cursor也关了重开过,所以为了让他继续开发,我需要让他了解之前所有的东西,我一般会使用@CodeBase 然后提示他查看上下文和任务进度(task.md),让他继续;

4、过程中,我也会想到和提出自己的一些建议;

时不时提醒它

这个我不太确定是否需要,因为我没办法验证有效性,但是从我的理解上来说,怕Cusor记忆丢失(AI对话久了老是会忘记背景和前面说的话),需要时不时作些提醒,总能加强他的理解,以防出现幻觉。我用的提醒方式有以下几种:

  1. 把必要的信息写入文档,包括需求、任务进度等,文档放在项目根目录,必要时@相关的文档;

  2. 需要全局它回顾代码时,用@CodeBase命令,它会去阅读项目所有的代码,以了解整体代码情况;

  3. 时不时的让他回顾下对话上下文,明白目前进度情况,对话背景等等,以知道后续要做的工作;

第四步,review所有代码

完成所有开发时,让他转换下身份,对整体代码Review并做些评价,有问题的时候再让他作优化

第五步:运行和测试

让它运行代码,和跑单元测试,这时候如果有报错,可以把错误发给它,让他修复相关错误。

第六步 编写文档

最后,让他编写相关的文档,这是提示词:

这文档编写出来的质量,真是清晰明了,包括架构图、流程图,使用案例等等,各方面都很完整


经过使用41个requests,一个注册账号可以免费使用50次,已经快用完。考虑重新注册账号或者购买pro版本以增加使用次数。pro版本据说可以通过某些渠道以更便宜的价格购买,我计划稍后寻找相关信息。 代码质量和后续维护方面,我非常满意。原本自己开发可能需要一周时间完成基本功能、修改和测试,并且难以保证性能、稳定性和质量达到要求。相比之下,现有代码的注释清晰,后续修改和维护会容易很多,比其他人写的一坨代码不知道好多少。

开发利器的看法

在当今快速发展的科技环境中,有一个强大的辅助工具对于开发者来说无疑是如虎添翼。它可以帮助我们克服在多种编程语言和开发环境中遇到的难题,无论是Chrome插件、Windows桌面应用、iOS开发,还是小程序与原生App的创建,这个工具都能提供极大的帮助。此外,面对日常开发中的重复性任务,我们也可以借助这一工具来简化流程,提高效率。

有了这样一个多功能的开发助手,不仅能够提升个人的工作效能,还能激发更多的创新可能性。无论是对于初学者还是经验丰富的专业人士,这样的工具都是一个非常吸引人的资源。可以说,它确实是一个‘香’的选择,为软件开发领域带来了新的活力和便利。