2025-05-10 17:58:58
摘要:一、安装Cursor
官网下周window版本,2025-6-5发布了1.0版本 Cursor - The AI Code Editor
设置语言包,跟vscode设置方法一样。(Cursor就是基于VSCode开发的)
设置Cursor
文件---自动保存
文件---首选项---功能---终端:window默认上终端配置文件,选择 git bush
设置Cursor所选的模型:取消自动
配置规则:
总是使用简体中文来进行回复
也可以添加项目规则,如
-总是使用uv作为Python环境和包管理工具
-总是将wsl+Ubuntu作为开发环境
-所有函数必须团结类型注释
-函数名使用snake_case,类名使用PascalCase
-所有api都应该遵循restful规范
-注释必须使用简体中文
-总是遵循《代码整洁之道》
-总数遵循《设计原则与设计模式》
定价 Pricing | Cursor - The AI Code Editor
配置linux开发环境
安装wsl:wsl install
安装 uv:curl -LsSf https://astral.sh/uv/install.sh | sh
安装python环境:uv python install --preview
安装pip:sudo apt install python3-pip
Cursor里面安装wsl插件
在Cursor左下方的按键就可以连接到wsl子系统了
连接上后在使用 /mnt挂在本机文件夹
二、生成前台代码体验
生成Login前台页面
初学者使用AI生成login页面的提示词
规范化提示词
请在login目录中设计一个响应式、风格美观的登录页面,页面应包含用户名和密码输入框,以及一个登录按钮。
请分别从HTML结构、CSS样式、JavaScript功能三个方面实现,确保用户体验良好,并具备基础的交互逻辑
创建一个标准的HTML登录页面结构,要求如下:
-页面居中显示,使用一个主容器;
-包含输入字段:用户名(type=username)和密码(type=p……
阅读全文
2025-05-03 21:35:10
摘要:一、提示词基础
1.1 定义与作用
graph LR
A[人类] -- B(提示词) -- C[AI系统] -- D[输出结果]
本质:AI系统的指令(问题/描述/关键词)
核心作用:
🗝️ 打开AI能力的钥匙
🌉 人机沟通的桥梁
🎯 决定输出质量的关键因素
1.2 重要性体现
| 维度 | 影响 | 案例 |
| :------: | :-----------------------: | :--------------------: |
| 输出质量 | GIGO原则(垃圾进=垃圾出) | 模糊提示→无关结果 |
| 创新能力 | 突破常规思维 | “设计反重力咖啡杯”提示 |
| 人机协作 | 理解AI工作原理 | 通过迭代优化提示词 |
二、高质量提示词编写
2.1 常见形式
指令式:
“分析2023年Q4电商报告,关注用户增长趋势”
问答式:
“什么是思维链提示?”
填空式:
“AI在__(领域)的应用改变了(行业)__”
对话式:
“作为产品经理,如何设计年轻人社交APP定位?”
创意式:
“写科幻小说:外星咖啡入侵地球”
思维链提示词
“让我们一步步来思考这个问题……”
2.2 关键要素
flowchart TD
A[明确目标] -- B[提供背景]
B -- C[设定约束]
C -- D[优化输出]
目标公式
动词+对象+限定条件
✘ “帮我看看代码”
✔ “审查支付系统代码,检查安全漏洞和性能瓶颈”
背景信息
客户邮件回复需求:
客户类型:VIP客户
问题:产品X的兼容性问题
语气:专业且热情
约束条件类型:
格式:表格/编号列表
字数:≤200字
关键词:必须包含“创新”
风格:高中生可读
三、提示词工程进阶
3.1 核心技能矩阵
| 技能 | 要点 | ……
阅读全文
2024-10-03 14:48:20
摘要:用户服务开发好之后,本来是要先介绍认证中心的。由于写了几篇了还没有看到电商业务的痕迹,于是今天先介绍品类微服务,做一期业务方面的设计与实现,下回再介绍认证中心。
一、品类与品牌
任何一个电商平台,品类是最先存在的一个业务功能。比如京东它最开始的定位就一个家电行业的垂直电商,后来最大了才有更多的其他品类。而现实中,可能会真正存在一个专门的品类管理处的部门,他们的职责可能是研究公司战略方向的。品类微服务不仅仅只是一个名称,它可能有专门的单独品类首页,有专门的营销策略,商品的存活的、推荐等等,因而品类对于电商业务来说是非常重要的。
品牌决定了电商平台具体卖什么东西,不同的平台品牌同意可能有不同的业务。比如营销方式、合作模式、分成方式等等。
对电商平台访问者来说,他们可能只是搜索商品,选择满意的商品后就下单了。他们知道品类和品牌的存在,但不会考虑到品类和品牌还有那么多具体的后台业务逻辑。而对于电商平台来说,品类和品牌是真正存在的可能还是非常复杂的业务。
接着我们来访问一下京东网站:
可以看到左侧有一个很大的品类选项。展开品类后又有二级或三级选择。随便点击一个三级品类选项后,可以看到URL地址:https://list.jd.com/list.html?cat=652,654,834 cat对应的值就是一个三级分类,分别提供了3个id值。
接着我们再在搜索框上随便搜个结果,可以看到品牌的筛选筛选项,品牌下面还会动态出现一些跟搜索的内容相关参数的筛选项,这些选择项都是动态的。比如我们搜索手机,出现的选择项是CPU、内存,电池,而我们搜索衣服时,出现的选择项变成了颜色、尺码、适用年龄。
根据分析京东的页面,我们大致可以了解到几个信息:
京东的品类有3级分类。
选择具体的品类后,才有关联的品牌。比如选择衣服后才有衣服对应的品牌,选择手机后才有手机的品牌。
筛选项是根据选择的品类后,动态出现的,也就是说筛选项会根据不同的品类有不同的内容,甚至还有高级选项。
于是我们就有了电商平台第一个业务相关的微服务品类微服务:
为什么品类服务要单独出来了,合并到商品服务里面不行吗?
微服务的划分没有标准答案,业务不是很复杂时,可以把品类服务合并到商品服务里面。而我们这里单独出来,是因为电商业务最……
阅读全文
2024-09-28 13:27:01
摘要:一、云原生介绍
概念
什么是云原生:云原生是一种软件开发的方法论,通俗来说就是在云计算环境中构建和运行应用程序
云计算的特点:弹性、可扩展、高可用
云原生关键点:
容器化
微服务
动态管理
CI/CD
弹性(容错机制)
服务网格
容器编排工具
监控平台(指标、链路、日志)
云原生开发与微服务开发
理念(云原生:云计算为基础;传统:固定的硬件)
架构(云原生:微服务、Serverless;传统:单机架构)
开发流程(云原生:CI/CD;传统:瀑布模型(没有自动化))
基础设施(云原生:通过代码管理依赖资源、自动配置;传统:事先准备、手动配置)
服务发现通信(云原生:环境中自带服务发现;传统:Consul、自己实现、提前准备、依赖硬编码、配置文件)
监控和日志(云原生:环境中准备好了各种监控、日志、链路追踪;传统:过于依赖外部组件)
资源利用率(云原生:动态调整资源;传统:资源分配不灵活)
开发环境和生产环境
云原生概要已经提出很久了,k8s可以说就是上就是一个云原生环境。
我在2019年的时候就开始带团队成员来是公司的微服务转型,那个时候都是自己手撸k8s环境,各种中间件集群也是自己搭建的。
那个时候云原生环境确实不好,虽然各大云平台都提供直接的paas产品,但很多收费都较贵,最终还是自己搭建。
更重要的时候本地开发时虽然安装的docker版本,提供了mini k8s环境,但是开发和部署的环境还是不一样的。
二、Asprise介绍
如果能有一个让开发和部署都是云原生的,开发的时候不需要自己去安装mysql,redis;同时开发的时候也不需要知道最终部署的是阿里云,还是微软云。只要开发环境是基于云原生的,开发环境拥有云原生的特性,比如监控、日志、链路追踪。部署的时候只需要提供对应的云产品的产品就能让系统跑起来,这种跑起来的方式,可能就是提供一个连接字符串就可以了。如果有这样的环境,那云原生开发将变得简单很多。
对的,这就是我们当前的明星出场的时候了。
.NET Aspire是NET 8.0 LTS提出的一套开发工具,它的作用就是构建和运行云原生应用程序。
特点:
Dashboard - 中心化的应用监控和探查:F5 启动 .NET Aspire可显示服务的统……
阅读全文
2024-09-14 11:51:22
摘要:上一篇我们介绍了本项目的基础架构,实际上共享项目里面还有很多内容并没有介绍。这是因为在没有具体业务前,光谈抽象类并不是很好理解,因此除了领域模型的规范和通用EFCore的实现外,其他的通用共享类都放到具体的业务中讲。
接下来,本次的出题就开始直接进入业务实现了,首先我们来谈第一个微服务,用户微服务。
一、用户服务领域层
因为我们整个项目采用的是基于洋葱模型的整洁架构,结合DDD的经典分层,我们的微服务基本上都分层四层。
ps:因为是培训项目,实际业务并不一定每个微服务都要采用一样的分层,实际开发中如果是小的,业务相对稳定微服务哪怕直接用文件夹来区分层次也是可以了。
在services文件夹中创建user文件夹,再创建DDM.DHT.UserService.Core类库项目,可以讲项目默认命名空间改成DDM.DHT.UserService。
接着创建Entities文件夹,再创建User.cs类,代码如下:
public class User : BaseAuditEntity, IAggregateRoot
{
protected User() { }
public User(string loginId, string phone)
{
LoginId = loginId;
Phone = phone;
Random random = new Random();
Name = Phone.Substring(0, Phone.Length - 4) + _ + random.Next(100, 999);
UseAble = true;
Salt = loginId.MD5EncodingOnly();
PasswordHash = 123456.MD5EncodingWithSalt(Salt); // default password is 123456
}
public string LoginId { get; private set; } = null!;
public string Name { get; private se……
阅读全文
2024-09-07 22:29:37
摘要: 一直以来想专心写一个基于云原生的微服务案例,但总角色要写的内容太多了。电商案例本身并不会太难,而要搭建好一整套云原生和微服务的基础设施,并不是一项轻松的工作。随着.Net Asprise的推出,再集成Dapr,开发和生产几乎可以保持一样的环境了。这让我惊喜,曾经我们手动搭建k8s,手动配置集群以及可以成为历史,我们需要的就是使用这些工具,重新把核心回归到业务上来。
正好新公司也是做电商业务的,于是我终于决定开始写一套云原生电商微服务的案例。一方面可以学习Asprise和Dapr的相关知识,也是一次属性电商核心业务的机会。
这次的内容会写得比较细,目标是把这个项目当成一个培训项目来写。让不了解云原生、不了解微服务和不了解电商业务的人,也能看得懂该项目。
一、DDD
DDD相关的文章以及很多了,我在几年前也写过一个DDD的学习系列,本文就只是做个总结,毕竟微服务是离不开DDD的。
解决什么问题
问题域
需求分析
分析理解复杂业务领域问题
准确反映业务语言
领域分析概念
领域
子域
核心域、通用域和支撑域
限界上下文
领域建模概念
实体与值对象
聚合与聚合根
领域事件
领域服务
仓储
工作单元模式
规约
应用服务
防腐层
领域驱动设计
CQRS: 命令与查询分离,作为一种战术办法,是实现DDD建模领域的最佳途径之一。
充血模型: 让模型自带业务逻辑,业务属性的改变只有模型自身可以操作。
二、整洁架构
核心原则
独立于框架:整洁架构的系统核心业务逻辑不依赖于具体的软件框架,业务逻辑部分都能够独立运行。这样在框架更新或者替换时,对核心业务的影响最小。
可测试性:架构设计使得业务规则可以很方便地被测试。因为业务逻辑是独立于外部组件(如数据库、用户界面等)的,所以可以使用单元测试来验证业务规则的正确性。比如,在一个电商系统中,“计算商品折扣”的业务规则可以通过提供模拟的商品价格数据来进行单元测试,而不需要真正地连接数据库或者启动整个用户界面。
独立于UI(用户界面):业务逻辑与用户界面相互独立。这意味着可以方便地替换用户界面,比如从一个命令行界面转换为图形界面,或者从Web界面转换为移动应用界面,而不会影响到业务逻辑。
独立于数据库:系统的核心不依赖于数据库的类型……
阅读全文
2023-09-25 23:01:42
摘要:一、CAR
1. CAR本质
URL请求----调用Action----生成html响应(或其他响应)
CAR就是个普通类---普通方法---最终生成HTML(也可能是其他的)
一个URL,怎么调用的Action---一定是反射----反射创建控制器实例,反射准备方法参数,反射调用Action方法(也许来点优化)
然后生成一段内容(啥都可以),写入到Response里面---然后由Kestrel回发到浏览器----浏览器解析报文做呈现
先Get这个本质,不要被各种封装各种特性看花眼了~
2. 关键节点-上帝视角
CAR虽然是最后才生效,但是在前面也出现了---全流程debug一下,回顾一下:
启动环节services.AddControllers注册IOC时扫描dll,保存到ApplicationManager
初始化中间件MapControllerRoute()转成ControllerActionDescripter
第一次请求进入,路由初始化DFAMatcher时触发转换成Endpoint,路由匹配找到Endpoint---鉴权授权---
执行Endpoint时实例化和缓存各种工厂、 Filter等---做好调用准备
执行Filter管道, ActionBegin状态实例化控制器, Bind参数
ActionInside状态开始执行Action,得到ActionResult
ResultInside状态开始执行ExecuteResult,得到结果
Controller-Action-Result流程结束
3. CAR源码
按照主流程往后走,先关注Controller,再Action,再Result,其中会有回溯
步骤1: services.AddControllers注册时扫描dll,转成ApplciationPart,保存到ApplciationPartManager
知识点:当前项目引用的dll都算数,所以是独立类库---扩展PartDemo
收集完的内容都是保存在ApplciationPartManager—等于是个中间层,其实就可以开个后门,通过其他方式添加数据进去---所以可以热插拔
甚至可以动态编译脚本---后插拔进去
步骤2:初始化中间件MapControll……
阅读全文
2023-08-20 21:32:52
摘要:一、快速认识Filter
1. 流程衔接点
MVC(Filter+Controller+Action+Result)流程和前面的各种中间件Middleware处理,是如何衔接起来的?
Http请求穿过一系列中间件,最终由路由RoutingMiddleware匹配得到RouteEndpoint
在EndpointMiddleware里面会执行其RequestDelegate,委托执行时就是FilterController-Action-Result
该委托在ControllerRequestDelegateFactory里面来构建的,里面通过ControllerActionInvoker来调用
这里有个新名字叫 FilterPipeline
2. 快速认识Filter
Filter是MVC里面核心组成部分,有着丰富的种类,交叉的顺序,复杂的嵌套,很有挑战! Filter分2种:
声明特性,实现Filter接口:CustomSimpleShowActionFilterAttributeCustomSimpleShowAsyncActionFilterAttributeCustomSimpleShowDoubleActionFilterAttribute:一个Filter里面既有同步,又有异步,只执行异步!能改参数,能改结果,非常强大注意异步版本的结果修改坑
控制器类实现Filter接口包括Action同步异步-Result同步异步---控制器生效,全部Action都有效
3. AOP面向切面编程
要说Filter,得理解下AOP面向切面编程Aspect Oriented Programming
POP面向过程,没有封装没有边界,难以应对复杂需求OOP面向对象,有封装有边界,能应付复杂需求,但原子---类---不容破坏,否则会影响稳定性---开闭原则
AOP能在不破坏封装的前提下,去额外扩展功能比如ActionFilter,啥都没修改,就能增加执行逻辑AOP的好处:
聚焦业务逻辑,轻松扩展功能
代码复用,集中管理
4. 框架中的AOP
现代化开发框架中,要灵活应用AOP面向切面编程思想: ASP.NET Core三层AOP
中间件:离MVC比较远,面向与请求级的事儿
Filter:更贴近MVC,面向单……
阅读全文
2023-07-10 15:35:12
摘要:从Http无状态协议---用户持久化的需求---最初是Cookie+Session---Token但是不管是哪种方式,有一段内容是不变的:
请求服务端,获取凭证
客户端再次请求,带上凭证
服务端识别凭证,判断是否允许访问
鉴权授权的本质是做啥的?
其实就是第3步解决用户识别和判断授权的问题被拆分成了2个动作:
鉴权Authentication:凭证识别解析,有没有登陆,凭证有没有过期,是张三还是李四
授权Authorization:基于解析来权限检测,判断下张三/李四有没有权限访问这个资源
一、实操
1. 没有任何权限要求实操
添加相关控制器, Cookie式登陆方法
UseAuthentication + AddAuthentication + Cookie
UseAuthorization + AddAuthorization(可不写)
[Authorize]
[AllowAnonymous]
校验流程:
未登陆,直接访问,跳转登录页
AllowAnonymous可直接访问
登陆后跳转,正常访问
退出后访问,跳转登陆页
2. 授权
Roles授权: [Authorize(Roles = Admin)]
Policy授权: [Authorize(Policy = AdminPolicy)]
复杂Policy授权: [Authorize(Policy = MutiPolicy)]
授权的设计,也是可以满足开发者各种这样的需求—目前还没演示完
如果是没有登陆,是跳转LoginPath---401
如果是有凭证,但没有权限,是跳转AccessDeniedPath--403
3. 发送了什么?
请求到达Action之前,即使没有标记,也会自动鉴权
主动鉴权:理解鉴权信息保存
主动授权:理解授权检测过程
4. 理解总结
鉴权授权是ASP.NET Core框架封装的2个中间件,目的在于请求进入具体的Filter-M-V-C之前,通过中间件完成用户权限检测包含2个步骤:
鉴权Authentication:鉴别有没有登陆,解析是张三还是李四(且将信息传递下去)---UseAuthentication配置Http管道,保证请求来了,都要做一次凭证的解析AddAu……
阅读全文
2023-06-26 16:24:03
摘要:一、核心流程概述
执行AddMVC() 将MVC的核心服务注册到容器,且通过反射扫描把相关dll收集起来
执行app.UseRouting() 将EndpointRoutingMiddleware中间件注册到http管道
执行app. MapControllerRoute() 将本程序集定义的所有Controller-Action-ParameterConversion转换为一个个的ControllerActionDescriptor放到路由中间件的配置对象RouteOptions中,注册并传入EndpointMiddleware中间件注册到http管道中
请求来了,管道模型Build---没啥动作,倒序执行中间件的实例化
收到一条http请求,先进入EndpointRoutingMiddleware,首次请求时会完成ControllerActionDescriptor到EndPoint的转化,然后通过DFA算法匹配一个Endpoint,并放到HttpContext中去
鉴权/授权/其他中间件可以根据根据Endpoint的信息对这个请求进行鉴权授权或其他操作。
EndpointMiddleware中间件执行Endpoint中的RequestDelegate逻辑,即执行FilterController-Action-Result等系列操作(MVC)
二、AddMVC
1. 上帝视角
AddMVC(AddControllersWithViews)是最初发生的,是IOC注册环节的事儿,在管道注册之前,其职责有2个:
添加MVC各种IOC注册,超多。。
反射遍历相关程序集,封装成ApplicationPart,供后续使用
2. 源码解读
从MvcServiceCollectionExtensions开始,绕一圈,最终是AddMvcCore()方法
先实例化ApplicationPartManager-----拿着项目名字,通过反射加载Dll,将信息封装到ApplciationPartManager的ApplicationParts属性中---扩展点
ConfigureDefaultFeatureProviders(partManager);的调用,这行代码是创建了一个新的ControllerFeatureProvide……
阅读全文