不限语言,你觉得最好用的框架和 ORM 是什么?

51 天前
 sxszzhrrt
rt ,不限语言,你觉得最好用的框架和 ORM 是什么?欢迎交流你的想法
13097 次点击
所在节点    数据库
186 条回复
james122333
50 天前
@seth19960929

你少了 11. 都是垃圾
SethShi
50 天前
印象里 created_at ,updated_at 这个就是从 ActiveRecord 来的, 这是一件很好的事, 我去看了一下 ActiveRecord 的代码, 很难相信这是 2025 的语法, 太让人难以理解了
https://guides.rubyonrails.org/active_record_basics.html#crud-reading-and-writing-data

SethShi
50 天前
@james122333 上热门看看, 统计有多少
james122333
50 天前
@seth19960929

我觉得我加上的都是一个选项
raphx
50 天前
Diesel ,啊哈哈哈哈哈
zpvip
50 天前
@cloudzhou #118
但凡,但凡,你去了解 GitHub 、Shopify 最近招聘,核心组件都在用 Go 等去重构
---------------------------------------------------------------------------------------------------
Github 我不知道他们是不是在用 go, 招聘的说明里, 含有各种语言, ruby, go, python, rust, c.
https://www.github.careers/careers-home

Shopify 根本没看到 go
https://www.shopify.com/careers/disciplines/engineering-data

就算用 go 也没问题啊, 如果一项工作涉及密集计算, Ruby/Rails 的做法就是单独开发一个 gem, Ruby 的 gem 本来就可以用 C/C++, Rust, go 开发, Ruby 只做 Ruby 该做的事.

例:
https://github.com/sparklemotion/nokogiri
https://github.com/ohler55/oj
https://github.com/huacnlee/rucaptcha

我评价一个语言的工业级, 习惯是广泛使用的中间件
比如大数据下 Kafka Flink ,运维革命性 Docker K8s 等
很抱歉,没有找到 ror 的影子
---------------------------------------------------------------------------------------------------
你是谁? 你评价工业级? Shopify 处理的是全球几百万商户的电商交易,GMV 千亿美金量级; Github 世界级的交友平台, 这不叫工业级,还要什么叫工业级? Kafka 、Flink 、K8s 这些项目多是系统级、分布式基础设施,天然会选择 Go/Java 这类静态编译语言。但这并不说明 Ruby/Rails 不是工业级,而是 Rails 专注点在业务开发,CRUD, 而非造分布式中间件。

Kafka 、Flink 解决的是分布式系统的问题; Rails 解决的是应用交付的问题。Rails 在 Shopify 、GitHub 这种量级上的实践,早就证明它的工业级价值。你拿高铁去耕田吗? 拖拉机不香吗?

==================================================

我的核心观点是, 不是说 Ruby/Rails 多牛, 能搞定 Github 和 Shopify 这种大网站, 恰恰相反, 我的意思是, 99%的网站都达不到 Github 和 Shopify 的级别, 就开始焦虑大雁是蒸着吃还是煮着吃, 你先快点射下来再说啊, 大雁都飞走了, 你还在那折腾 DI, Servcie, Interface, 跟前端讨论返回 String 还是 Array, 还在 diss Microservice 团队没给你准备好支付队列.

我提到的 IoT 平台开发已经算是一个中大型应用了, 我们用了 K8s, Argo CD 动态调整 Rails 服务器数量, 同时启动了几个 Sidekiq 分布式队列做数据入库, 还有 Redis 做缓存, 服务器常年压力在 10% - 30%, Ruby 性能是差, 但服务器便宜啊, 内存白菜价啊.

说回原话题, 从 ORM 的角度, Active Record 用了 Ruby 的元编程, 极其优雅, 做到了零样板代码, model 自动生成, 代码极简:
class User < ApplicationRecord
end

然后就你在全网站内不用声明, 不用引用, 就可以随便写:
User.find(1)
User.where(name: "Alice")
User.find_by_name("Alice")
user = User.find_by_email("test@example.com")
user.save
user.update(email: "...")
user.destroy

model 里面也是元编程, 把数据库关系和校验逻辑变成声明式语法,开发者写起来就像在说人话。
class User < ApplicationRecord
has_many :articles
validates :email, presence: true, uniqueness: true
end

Active Record 背后的哲学就是 Convention over Configuration 。不用写映射文件, 不用手动指定列到属性的映射。

最后给大家泼一下冷水, Ruby 学校没教, 要自学, 考验自学能力, Rails 入门陡峭, 入门后一马平川. 你如果想开飞机, 不好意思, 要考证, 骑自行车不用考证.
lesismal
50 天前
@zpvip @cloudzhou github 的用户群体、在线和并发对应的业务类型的技术需求特点是:重存储,cpu 消耗不是最优先(相比于其他大社交、电商、搜索、多媒体之类的大厂),所以确实不是好例子。FB 的 PHP 跟阿里当年 LAMP 后来搞 Java 和去 IOE 都是一个道理。

多数团队当下的技术选型是商业目的优先(如果都能做,选个技术团队熟悉的),做起来之后再根据可行性尽量去换更好的,这些道理,与新结婚买小婚房、有钱了再买改善房,或者日常折腾各种升级升配的电子产品车子玩具,没什么区别。
所以,当初选的,如果只考虑技术角度,并不能代表就是最好的。

对性能、透明性之类的没有什么要求的团队,用 ORM 方便就行,有这方面要求的团队对 ORM 的态度基本都是禁止的。

我个人对所有语言的 ORM 的态度都是星爷电影里大师兄的名句:我不是针对谁,在座的全是垃圾。
mizuhashi
50 天前
@dcsuibian 啊哈哈 我倒是覺得語言的排名看薪資比較有意義,多不多人用好像無所謂 https://survey.stackoverflow.co/2023/#section-top-paying-technologies-top-paying-technologies
zpvip
50 天前
@lesismal 在射大雁这件事上, 我相信 Rails 在网站开发方面是最快梯队的, 以前来说, 手写代码量也是最少的, 代码少 Bugs 也少, 不写代码就没有 Bug :) 现在加上 AI, 我几乎都是用 Cursor 写提示词 + PUA Claude-4, Rails 代码量少就可以省 token, 也就是省钱省时间, 把 Java 那堆裹脚布放到上下文, 慢不说, 钱包要受更大的伤害了.

"在座的全是垃圾" 这句话没问题, 薯条也是垃圾食品中的战斗机, 但全世界都爱吃. 尊重你这种这手搓 SQL, 时间大把的极客, 那, 做人呢, 开心最重要了.
MindMindMax
50 天前
pony orm
dcsuibian
50 天前
@mizuhashi 这个不好说,真这样的话 Zig 就是最好的语言了
进入这个排行榜至少得是找到了工作吧。以就业来看的话,粥多僧也多,粥少粥也少。所以没有如果不能确认两者的比例,我一般不讨论这个,说不好的
我觉得看一个语言值不值得学,得看是否有持续的新鲜血液注入。如果新的程序员不学了,连培训班都不愿意教了,那多半也就没啥生命力了。
alinwu05
49 天前
Yii2 自带的 active record, 太好用了,复刻 Rails
FlashEcho
49 天前
@zpvip #114 ruby 部署不友好啊,性能最好、生态最广泛的 serverless 是基于 v8 isolate 的,如果用 ruby ,要么用底层有 vm 的 serverless ,要么用厂商定制的运行时,所以用 js 是部署最好的,而且用 ai 开发也很快了。如果说小规模业务不该用 java ,用 ruby 一把梭更快,那 js 比 ruby 还要快
dddd1919
49 天前
don`t bb, show me code

举个 Rails 的例子,数据库用户表 User(id, name, gender),对应的 ORM 代码声明


新增用户可以一句 User.create(name: "foo", gender:1)
查询名为 foo 的用户可以 User.find_by_name("foo") 或者 User.where(name: "foo")
要删除所有 gender 为 1 的用户可以 User.where(gender: 1).delete

代码简单到会忘记 sql 的存在
cloudzhou
49 天前
@zpvip 瞧瞧你举得这些组件,是要笑掉大牙吗? json xml 解析,Captcha 生成?这些 tools 拿出来干嘛?什么语言不能做到???你找不到更好例子了吗?你对 ror 不大熟悉啊

还有 rucaptcha Captcha Gem for Rails, which generates captcha image by Rust. 在打自己的脸吗???
计算机领域别说操作系统内核、数据库、编译器,最起码也要举个中间件来说道

C/C++ 在底层开发依然兼顾,Java 业务领域稳如磐石,Go/Java/Rust 中间件中流砥柱,Python AI 风生水起
而你,我的朋友,依然坚守一个只会开发爽那么一下下的语言

---
你的评论,足见你根本没参与过大型项目开发:

哪个前后端分离、微服务及其他语言框架的 CRUD 不能用 Rails SSR 搞定?
我用 Perl 都能搞定,要用吗

前后端分离的出现是因为要切分任务, 微服务是切分功能, 都是在没有 AI 的情况下, 人的精力和水平有限, 搞不定.
和你说了千百遍,真正复杂的是业务逻辑,语言那点玩意 1 小时理清,AI 还没到理解业务的地步
天哪,2008 年我参与的项目 ALL IN ONE / Server Template Render ,难道要起死回生了???

Rails 根本不需要 DI ,因为类加载直接就是常驻内存,controller 类里直接用 model 类和对象,少一大层 ceremony
DI 是为了常驻内存??? DI / IOC 的全称是什么?是为了解决什么问题,两者关系是什么?
先不要 google 和问 ai ,你能否回答出来
Soar360
49 天前
C# 中的 NewLife.XCode
cloudzhou
49 天前
@lesismal 你说的是对的,商业验证优先

只是目前开发来说,不管是 Java/RoR/Django ,其开发效率很大取决开发者熟悉程度,尤其有 AI 支持下,那点开发效率差距微不足道,我是强烈建议不要在脚本语言上投入太多了,除非像学习 AI 下去熟悉 Python ,本质是为了 AI
tangqiu0205
49 天前
kotlin + ktorm
1wlinesperday
49 天前
Ent 虽然没有很完善 但是配合拿到做 GraphQL 是很好用的,这个是 Facebook 内部的 Ent 框架的一个仿品,
个人也感觉代码 ORM 生成的路子才是正道啊
zpvip
49 天前
@cloudzhou #155 鸡同鸭讲, 你根本没有听我在说什么. 我在说铲子好用, 你说你挖掘机力气大. 我说锤子好用, 你说你挖掘机力气大. 我说我们进山挖笋了, 你说你挖掘机力气大.

我说挖笋用不着挖掘机, 你说我就会挖笋.

我从来没说过 “DI 是为了常驻内存”。我的意思是,在 Rails 里一启动程序所有的类都已经自动加载好了,controller 类内部可以直接调用 model 类,不用像 Java 那样 package 、import 写一堆裹脚布,更不用小心翼翼搞个 DI 来“合法化”类之间的依赖。Rails 的哲学是 Convention over Configuration ,你关注业务逻辑就行,不用和框架 ceremony 打架。

你说“复杂的是业务逻辑”。对啊,复杂的是业务逻辑,那你还在那折腾层层架构、满世界抽象干嘛?让你把时间用在业务上,而不是写一堆 ceremony 骗自己做了工程化. 现在 AI 来了, 你那些裹脚布代码每次当 context 都是要花钱的, 花钱事小, 关键还占了 Context window 的字数, 现在又怪 AI 理解不了你的业务. 我不知道你用的什么模型, 我用 Cursor + claud 4 sonnet, 有 1 百万 token 的 context window, 我都直接长篇大论然后发送后去喝咖啡, 比如一个复杂带验证的表单, 前端带 hotwire js, 后端 model 连数据库带联查, 包括数据库 migration, 这么多东西, 几分钟后我回来时, 它就写得差不多了, 再 PUA 几轮, 写个测试就完美搞定了.

你的业务有多复杂, 发个例子看看, 你不会是甩给 AI 几个字, 让它 "写个淘宝" 就不管了吧.

世上没有什么万能的, 都是 Trade off, 有利就有弊, 前后端分离, 微服务相对 monolith 同样有利有弊. 所以要分时期, 知道自己做什么, 如果你真是拿屠龙刀打天下的主, 那你应该更清楚什么时候做什么, 就怕你是个在灶台打转的厨子, 天天大汗淋漓拿屠龙刀切土豆还说人家菜刀太菜了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1153288

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX