拒绝 if-else:基于 DDD 与状态机的订单业务
作为一名后端开发者,你一定看过这样的代码:比如你要写一个订单业务,在 OrderService 里写了一堆 if-else 来判断订单能不能发货、能不能退款。随着业务越来越复杂,这些 if 就像面条一样缠在一起,改一个地方崩三个地方,这种代码非常不健康。 我们要用 DDD(领域驱动设计) 的思想,配合 状态机模式,让你的业务代码更健壮。 背景假如你有个订单业务,订单有以下几种状态: CREATED: 待支付 PAID: 已下单,待接单 ACCPETED: 已接单 DELIVERED: 已送出 COMPLETED: 已完成 CANCELLED: 已取消 REFUNDED: 已退款 用户事件: 支付: 把 CREATED 变成 PAID。 收货: 把 DELIVERED 变成 COMPLETED,或者把 CREATED 变成 CANCELLED 。 退款: 把 某一状态 变成 REFUNDED。 以前我们是怎么写的:这是典型的“三层架构”写法。 Order.java (实体类,只有Getter/Setter) 12345678// 这就是所谓的“贫血模型”,它只...
HTTP、Cookie与OAuth认证:API逆向与后端数据的抓取
你是否遇到过这种情况:在网页上看到了一堆有用的数据(比如数据表单、排行榜、或者社交媒体评论),想要把它们保存下来分析,但手动复制粘贴太慢了? 这时候,你需要的是直接与后端服务器对话,从后端抓取数据。 很多人把这叫做“写爬虫”,但更专业的说法是API 逆向或后端数据抓取。今天,我们就抛开复杂的各种自动化浏览器工具(如 Selenium、Playwright),回归本质,聊聊如何像浏览器一样,通过代码直接向服务器索要数据。 我将以获取 PTA 排行榜 (视奸小登进度) 和 反代 Antigravity 的 API 为例。 前端是怎么和后端通信的?HTTP 协议浏览器和服务器之间的交流是基于 HTTP 协议(HyperText Transfer Protocol)的。 客户端/浏览器: “我要请求一个 API 获取数据。” —— 请求 (Request) 服务器: “好的,这是您的数据。” —— 响应 (Response) WebSocket 协议WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它让服务器能够主动向浏览器推送数据。 握手阶段(HTT...
使用 Cloudflare Tunnel 给 Huggingface Space 自定义域名
Huggingface 其实也是个大善人,有免费的 2c 16g 的 space 让你免费用。 美中不足的是普通版不能自定义域名,那么就用 cf tunnel 给他反代一下。 Cloudflare Workers 也可以反代抱抱脸空间,但是会占你访问额度,也有CPU时间限制。。。如果你需要 Websocket 也有点麻烦。。。 更新 [!WARNING]仅仅打包成镜像仍然有被封空间的危险! 可以套一层 nginx ,在7890端口伪装静态页面main.conf 123456789101112131415server { listen 7860; listen [::]:7860; server_name _; location / { root /usr/share/nginx/html; index index.html; } location /health { return 200 'OK'; add_header...
52.63km,10万步:我用双脚丈量了峨眉山的全程
“别人问我为什么要走完全程?我说,山就在那里,而这只有区区五十公里。” 挑战的开始起因其实很偶然。在逛“两步路”APP时,无意间发现了一条峨眉山的“VIP路线”(懂的都懂,逃票进山路)。 因为这条路线的特殊性,下山时无法购买景区大巴车票。我当时想都没想,心一横:既然坐不了车,那就干脆走下去。五十多公里,在地图上看起来也就是一截指头的长度,没什么大不了的。 毕竟我都能跑 42.195 的马拉松。 后来的事实证明:确实“没什么大不了的”。 身体的勋章在开始叙述细节前,先晒出这枚属于我的勋章: 总里程: 52.63 公里 总步数: 100,000+ 步 累计爬升: 4137 米 耗时: 21h 消耗热量: 7832 kcal 52.63 km 轨迹图 4137 m 累计爬升 爬升的虐点:永无止境的石阶一开始遇到了拦路泼猴,好在被人用弹弓赶走了。 很多人说“九十九道拐”是极限,但对我来说,那只是热身。真正让人崩溃的是洗象池前后的那段路。真是永无止境的爬升。 石阶似乎永远没有尽头,每走几步就要停下来大口喘气,肺部像是在拉风箱。最后我甚至都想用雪山步一步一步...
使用 Cloudflare R2 零成本搭建个人图床
在写博客或者维护网站时,图片的托管一直是个让人头疼的问题。放在本地会增加 Git 仓库体积,使用公共图床又担心随时“跑路”。今天介绍如何利用 Cloudflare R2 搭建一个高速、稳定且几乎免费的个人图床。 另外,对象存储在折腾 serverless 的时候也是不可或缺的。 什么是对象存储?在开始之前,我们需要了解什么是对象存储。 简单来说,对象存储是一种专门为大规模非结构化数据(如图片、视频、备份文件等)设计的存储架构。与传统电脑上的“层级文件系统”(文件夹嵌套)不同,对象存储将数据作为“对象”进行管理: 对象(Object):包含数据本身、元数据(Metadata)和全局唯一的标识符(ID)。 桶(Bucket):存放对象的容器。 特性:它具有极高的扩展性和可靠性,通过 API 或 URL 直接访问,非常适合作为网站的静态资源存储。 常见的对象存储服务有亚马逊的 AWS S3、阿里云的 OSS 和腾讯云的 COS。 什么是 S3 API ?AWS S3 (Simple Storage Service) 的 API 是目前云存储行业的事实标准。绝大多数的对象存储服务(包...
Hello World
Welcome to fallensakura715’s first post.




