V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Ketteiron  ›  全部回复第 1 页 / 共 26 页
回复总数  518
1  2  3  4  5  6  7  8  9  10 ... 26  
3 天前
回复了 8675bc86 创建的主题 程序员 AI 是不是基本杀死了 blog
@Kirkcong #68 各大中小厂商的文档只能用狗屎来形容,如果再打开官方提供的 SDK 看一下源码更是不堪入目。
const deps = getDeps.call(store, store);
这样的实现必须手动在 getter 写一次,@memo 指定依赖列表,完全依赖约定,把 react 的糟粕带了过来。

useStoreSelector 是通过猜测用户访问了什么属性调用 trackGetterAccess 增加引用计数,有多脆弱我就不说了,至少 StrictMode 会错误计数。此外没处理好竟态条件。

另外 View 层反向控制 Model 的缓存过于反模式,只要没有 React 组件在查看属性,就会直接删掉缓存。
Immer 混搭 weakMap 过于奇葩。

一堆 any ,看一半就没耐心看下去了。
函数式的重点在于不可变更新。

> 费力地模拟着面向对象
不费劲,闭包是穷人的对象。

你说对象=状态+行为

更准确地说
对象=原型链+状态+行为
闭包=状态+行为

get() 和 this 有本质上的区别,this 只会带来 bug 和心智负担。

> 它是“二等公民” :你必须显式地调用它 get(),而且它打破了 JS 引擎对 this 的自然优化。
这是我 2025 年听到最好笑的笑话,比这个还好笑 /t/1177228
9 天前
回复了 zhengfan2016 创建的主题 Vue.js 请问 vue3 的 onclick 和 @click 有什么区别
我有个不相关的问题,这位老哥会被疯狂 @吗?
https://www.v2ex.com/member/click
9 天前
回复了 MagicCoder 创建的主题 程序员 从已损坏的备份中拯救数据
不太可能是网络波动导致的,nfs 默认使用 tcp ,tcp 是解决网络不可靠的传输协议,要么完整地传输过去,要么抛出一个错误提示传输失败。
"Corrupted block detected"
"Restored data doesn't match checksum"
这已经说明了文件在存储前/后发生了变更,我是觉得你的内存或者硬盘至少坏了一个,另外系统卡死大概率是相同问题,全部排查一遍吧。
@yeqizhang #9 标准结论一直都有啊,用不用 jwt 只看需不需要 jwt 。
jwt 实际上是拿 cpu 解密开销换取数据库查询开销,为了安全性可能会双 token(15 分钟危险期) or 单 token+redis(秒级封禁)。除此之外有非常多的组合方法,但各有侧重点没有高下之分,软件开发不存在通用最优解。
10 天前
回复了 MagicCoder 创建的主题 程序员 从已损坏的备份中拯救数据
大概率内存出问题了,基本上 99%的文件静默错误来源于内存比特纠正失败。
生成的压缩包带上了错误的校验和,那肯定会失败,一开始就不存在正确的数据。再一次证明了 ECC 内存的重要性。
把建模从 interface 换成 schema 不就行了,与其从类型生成 runtime ,不如限制 runtime 并派生完全相同的类型。
类型生成 runtime 是有正当用途,某些框架例如 Vue 可以通过类型生成 runtime ,但是业务也这么干我感觉是歪门邪道。
这也是一个老生常谈的话题,我觉得所有尝试反射、保留元信息的做法都是错误的。
https://github.com/akutruff/typescript-needs-types
agent 模式区别不大,对话会有影响,但非英语母语水平还是不建议用英文,除非你的中文水平也达不到中文母语平均水平
@flytsuki 会被写 C 的鄙视
16 天前
回复了 cmos 创建的主题 程序员 要是用 Rust 就不会出问题了
@XIVN1987 写得差该漏还是漏,但相对来说几率小很多。js/py 很容易无意识写出导致内存泄漏的代码,其次是大量使用的依赖库本身也有很多内存泄漏。
16 天前
回复了 cmos 创建的主题 程序员 要是用 Rust 就不会出问题了
@XIVN1987 带 GC 的语言,屎山堆起来肯定会遇到内存泄漏,而且排查困难,有可能是狗屎业务代码引发的,有可能是底层框架/库引发的,还有可能是编译器/解释器自己的问题(点名 nodejs)。
20 天前
回复了 Kinnikuman 创建的主题 TypeScript 你们是怎么学习 typescript 的?
typescript 没有规范一说,因为随便一个特定场景都有十几种等价写法。
如果对 typescript 有兴趣,可以尝试下挑战一下
https://github.com/type-challenges/type-challenges
但这样的项目无法真正"教会"如何写 typescript 。
笑死了🤣可以评选今年最佳
22 天前
回复了 shakaraka 创建的主题 分享创造 在写 ts 项目的时候,被依赖注入烦到
@Chuckle 这些都可以用中间件实现,我感觉不到太大好处,还丢了类型安全。
当然,没有非常通用的库,对于不同场景下的用例可能需要手搓。
对象和参数就应该是不可变的,装饰器这套隐藏的风险太大,太过依赖"约定大于配置"。

而且这取决于底层用的框架是什么,nestjs 没得选,hono 之类的框架也没得选。

如果不用框架,我觉得显式编程对比装饰器多数情况下代码行数会更少,除非项目/库架构基于对象可变性。
22 天前
回复了 shakaraka 创建的主题 分享创造 在写 ts 项目的时候,被依赖注入烦到
@shakaraka #13 你都用 bun 了,没试过 hono/elysia 之类的框架吗。它们更加激进地采用函数式路由+中间件+RPC ,不使用 FP 去开发会极其别扭。它们的代码库本身也是实用性函数式实践的一个良好示范。
nestjs 等项目依赖装饰器和类来定义结构,而这些较为新颖的框架是 schema 第一,类型第一,函数优先。它们推荐你使用 schema ,配合 prisma/drizzle/kysely 等 ORM 可以得到最良好的体验。
以 drizzle-orm 举例,定义好表结构,使用 drizzle-zod 可以派生出相应类型,例如一个表字段定义为 varchar({ length: 50 }),派生出的 schema 会自动生成 z.string().max(50),其运行时检验保证错误参数绝不会到达 sql 层,并且建议这份 schema 同时应用在前端表单校验和路由参数校验上,而前端使用框架提供的 RPC 获得与后端接口完全一致的类型,类型是框架反射 schema 类型和当前路由返回值提取出来的,不需要开发者重新写一遍,这套做法极致地实现了 DRY 理念,只需定义一份契约,保障全链路的运行时安全和 typescript 类型安全,并且减少了一堆冗余文件。
当使用这些框架去开发,已经没必要再分什么层了,分无可分,直接在路由编写业务代码就行。
而在此之上还有一堆优化空间,多用函数式,理想情况下可以压缩 75%以上代码,并且 bug 更少类型更安全且一致。
当然要践行起来坑也是不少的,例如我正在考虑把 zod 和 drizzle 换成 arktype 和 kysely 。
@dolorain 不用全开一遍,IDEA 装上特定语言的插件就行了,据我所知没有任何区别。
不过除了写 Java 我不会打开 IDEA
22 天前
回复了 shakaraka 创建的主题 分享创造 在写 ts 项目的时候,被依赖注入烦到
@shakaraka #9 差不多这个意思,但它写的例子不对
export async function getUserById(id: string, repo: UserRepo) {
return repo.findById(id);
}
这种做法只是另一种脱裤子放屁的实现

当我们用面向对象思想组织代码,会将变量与函数实现放在 class 中,没有全局作用域的语言必须这么做。
这会导致一个问题,我必须先有一个对象,然后才能调用这个函数,这导致一句著名的话:"你想要得到一根香蕉,但结果却得到了一个拿着香蕉的大猩猩,以及整片丛林",那七八百行就是当前上下文的丛林。

如果换成偏向函数式的 js 来写,import domain/server/repository 等方式是冗余甚至有害的,因为这些对象有着依赖关系。
我通常不会主动创建任何不必要对象,函数只是函数,它们可以有一个主人,例如当前的 js 文件本身,等待其他文件对它进行调用,不需要特地装进一个箱子,或者大中小三个箱子。

像 userService.getUserById() 之类的写法完全没必要,userService 是一个冗余的命名空间
import { getUserById } from '@/xxx/user' 就行
绝大多数情况下分层也是没必要的,这反而加大了业务理解难度
不需要得到这个函数后面的所有隐式依赖对象,简单地得到这个函数本身然后调用它就行
要得到一根香蕉,只需要执行一个能获得一根香蕉的函数。
那么所有的依赖关系就只留在互相调用之中,没必要特地去管,尝试无意义的解耦没有太明显的好处。

一直以来用不用 DI 有争议,我是选择了不使用 DI 的阵营,并且应用于大型项目。
https://stackoverflow.com/questions/9250851/do-i-need-dependency-injection-in-nodejs-or-how-to-deal-with
喜欢 DI 的人会使用面向接口而非面向实现更好这个理由,但我一直认为是坏处,面向函数、面向类型/契约编程,需要编写的代码更少且更安全。
1  2  3  4  5  6  7  8  9  10 ... 26  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2477 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms · UTC 05:21 · PVG 13:21 · LAX 21:21 · JFK 00:21
♥ Do have faith in what you're doing.