avatar
文章
75
标签
62
分类
23

主页
标签
分类
链接
关于笔者
玲辰书斋
搜索
主页
标签
分类
链接
关于笔者

玲辰书斋

利用 Delegated Types 与 Self Joins 设计高扩展性系统
发表于2026-01-05|系统设计
前言 如何设计一套类似Confluence、语雀、Notion这类CMS系统,在一个容器内,里面含有大量的不同形式的内容,同时多种内容又有很多类似的操作:移动、复制、删除、支持评论等。一个文档下可以写文本,也可以再次建立子文档,文本评论也可以建立子评论。一篇文档能够清晰的查看操作历史、变化内容。同时一个容器内可能还会新增一些不同的内容,又同时也要支持上述的操作。 https://dev.37signals.com/the-rails-delegated-type-pattern/ 文章中探讨了37Signals团队如何设计系统架构,保证高维护性和高扩展性。其核心概念就是Recording、Recordable和Event。本质上,他们利用了Delegated Types + Self Joins模式设计架构,来最大程度上支持高扩展性和可维护性。 参考资料: Active Record Associations — Ruby on Rails Guides https://api.rubyonrails.org/classes/ActiveRecord/DelegatedType.h ...
kamal 部署加速
发表于2026-01-01|部署
国内墙的原因,导致在使用kamal部署到服务器上慢的要死,最近折腾了一下,在不适用代理情况下,第一次部署在两分钟内,之后更新就在三十秒左右。 举例项目脚手架生成的最基本项目 -> ruby -v ruby 3.4.6(2025-09-16 revision dbd83256b1) +PRISM [x86_64-linux] -> rails -v Rails 8.1.1 -> rails new demo --css tailwind -d postgresql dockerfile syntax 卡住# syntax=docker.m.daocloud.io/docker/dockerfile:1 # check=error=true 实际测试下来比较稳定,偶尔会卡住 docker login 卡住dockerHub 登录一直卡住 我换成腾讯云docker个人仓库,我看免费有十个,个人完全够用了,需要提前绑定密码,账号就是腾讯云用户Id # Where you keep your container images. registry: # Alternatives: ...
Vue 组件间通信方案:实现 Drawer 单例模式
发表于2025-10-09|前端
需求背景在 List 列表页面中: 每行数据的操作栏有一个按钮 点击按钮会打开对应的 Drawer(抽屉)组件 Drawer 是独立组件,每行数据对应一个 Drawer 实例 核心需求:当打开新的 Drawer 时,自动关闭之前打开的 Drawer 解决方案对比方案1:父子组件通信实现思路: 在父组件中维护当前活跃的 Drawer ID 子组件打开时通知父组件更新状态 父组件通过 props 或事件通知其他子组件关闭 代码示例: // 父组件 data() { return { activeDrawerId: null } }, methods: { setActiveDrawer(id) { this.activeDrawerId = id } } // 子组件 props: ['activeId', 'drawerId'], watch: { activeId(newVal) { if (newVal !== this.drawe ...
Rails层级设计演化
发表于2025-07-09|Ruby
Rails层级设计演化 相关资料 37signal - 层级设计 37signal - concern设计 层级设计翻译 concern设计翻译 gitlab-ddd应用 面向资源编程 最初的样子我们都知道rails初始化项目,在层级拆分上只有两层 controller model controller负责接收请求,model负责实现存储,那业务逻辑在哪里实现? 可能为了model的干净,将业务逻辑写到controller中。也有可能为了代码复用,将业务逻辑写在model中。但不管选择哪种方式,如果不进行谨慎的管理,随着业务的不断迭代,你的controller或者model也会逐渐的臃肿,变得难以维护。自然而然的大家决定抽离出业务层,比如:Service,Command等等 引入Service/Command比如我有一个报价单模型,我可能有类似的结构 # controller class QuotationController < ApplicationController end # Command class QuotationCommand def cr ...
警惕AI
发表于2025-04-06|开发工具
警惕AI​ 2022年年底时,Chatgpt横空出世,让每个使用过它的人发出赞叹,大家都在提问各种问题,程序员可能是最早一匹去接触与尝试的群体了。大家都想看看这个小玩意儿能迸发出多大的力量,要是能帮我干活儿就好了。给我写代码!!! ​ 但那时AI还像个小孩子,对于简单的问题能快速回答,但稍微复杂的问题,我们称之为一本正经的胡说八道的人工智障。但这并不影响我们非常看好它。再后来Github推出copilot以及一大堆AI提示工具,你第一句代码还没写完,AI就已经提示出你下一句话可能是什么。如果不对,你可以继续写原本的代码,它会根据新增的信息再去调整与生成。这用起来很方便,目前为止你的副驾驶有一位很棒的伙伴。 ​ 再后来的cursor,你更多的是像产品经理一样提出你的需求,它会尝试着自己去考虑所有的问题,并进行代码编写,很多简单的需求,或从零到一的小项目,几分钟后运行的结果如你想象一致,而这在过去可能会花上你半天甚至更长的时间。当然遇到大型,复杂项目它仍然会有各种问题,你知道它无法代替你,因为里面有很多内容是AI不清楚的,如架构,特定用法,DSL等等。但它已经足够棒了,如 ...
Ruby元编程实战
发表于2025-02-09|手写系列
本文主要介绍一些元编程的使用技巧 Hash映射对象将Hash转成对象,键值对转成对象的方法,灵活的通过函数调用来获取值信息 module ActsAsField def self.included(base_class) base_class.instance_variable_set(:@all_fields, []) # 一个常见的技巧,通过钩子函数,当模块引入时动态扩展 base_class.include Instance_Methods base_class.extend Class_Methods end module Class_Methods # 声明变量信息,并自动生成实例方法 def field(name, path) instance_variable_get(:@all_fields) << name.to_sym define_method(name.to_sym) do case path when String ...
RSpec 测试示例与技巧说明
发表于2025-01-12|Ruby
RSpec 测试示例与技巧说明本文档整理了多个 RSpec 测试示例,并详细说明了每个示例中使用的技巧和代码示例。这些示例涵盖了常见的测试场景,包括基本断言、异常处理、状态变化、依赖注入、以及使用 spy 和 double 进行测试。 目录 基本断言 异常处理 状态变化 依赖注入与 double 使用 spy 进行测试 模拟日期和时间 基本断言示例代码RSpec.describe 'Assertion' do describe 'expect equality' do it do foo = 1 expect(foo).to eq(1) end it do foo = [1, 2, 3] expect(foo).not_to equal([1, 2, 3]) end end describe 'expect Truthiness' do it { expect(1 + 1 == 2).to be true } end describe 'match a ...
位运算 & (与)实际应用
发表于2024-12-08|数据结构
疑问? 在linux系统中,我们经常使用chmod进行文件权限修改(读,写,执行) 比如我要对some.sh赋予权限: chmod u=rwx,g=rx,o=x some.sh u=rwx: u 表示文件所有者(user)。 rwx 表示读(r)、写(w)和执行(x)权限。 这意味着文件所有者将拥有读、写和执行权限。 g=rx: g 表示文件所属组(group)。 rx 表示读(r)和执行(x)权限。 这意味着文件所属组将拥有读和执行权限,但没有写权限。 o=x: o 表示其他用户(others)。 x 表示执行权限。 这意味着其他用户将只有执行权限,没有读和写权限。 可以看到我们分别对文件所属人,文件所属组,其他用户赋予了读,写,执行的权限,那这些信息实际存储是什么样子的呢?难道是一个数组? u: [r, w, x], g: [r, x], o: [x] 这种看起来最直观,但有没有更优雅的方式,比如用一个数字就能表示所有的权限信息,u: 7, g: 5, o: 1,经常用这个命令的人知道,上述的写法可以使用chmod 751 some.sh直接表示 那为什么我通 ...
Zed动态查询
发表于2024-12-03|开发工具
尝试过nvim的人应该都对telescope这种文件查询风格很喜欢,当在输入时能自动进行重新查询,并通过上下键进行翻阅 我目前在使用另一款编辑器Zed,它目前内置的查询并无法做到类似的操作。但通过内置的Terminal+fzf+bat+rg也能做到类似的效果 fish function function search_and_edit # 使用rg进行文件搜索,并使用fzf进行预览 set -l selected_file (rg --column --hidden --line-number --no-heading --color=always --smart-case --glob '!**/.git/' --glob '!**/node_modules/' . | fzf --ansi --delimiter : --preview 'bat --style=numbers,changes,header --color=always --highlight-line {2} {1}' --preview-windo ...
Electron分享
发表于2024-10-09
背景 我想开发一个桌面应用,可以记录任务待办,统计完成情况,计时器(番茄钟),系统通知等功能,其中前三点都可以通过Web开发完成,而系统通知功能(底层交互)无法满足。所以想在2024用最小的努力开发一个小APP。最好一次开发,跨端使用,在Windows和Mac上都能用。 最终我确定了Electron 结果分享:https://github.com/GengCen-Qin/tomato-todo 是什么? 官方文档 官方地址:https://www.electronjs.org/zh/docs/latest/tutorial/quick-start Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需要本地开发 经验。 简单来说就是:如果你会前端开发,通过Electron可以开发出跨平台应用。通过 Chromium(用于显示网页)和 Node ...
12…8
avatar
庚辰
要么读书,要么旅行,身体和心灵总有一个要在路上.
文章
75
标签
62
分类
23
Follow Me
最新文章
利用 Delegated Types 与 Self Joins 设计高扩展性系统
利用 Delegated Types 与 Self Joins 设计高扩展性系统2026-01-05
kamal 部署加速
kamal 部署加速2026-01-01
Vue 组件间通信方案:实现 Drawer 单例模式
Vue 组件间通信方案:实现 Drawer 单例模式2025-10-09
Rails层级设计演化
Rails层级设计演化2025-07-09
警惕AI
警惕AI2025-04-06
分类
  • JVM5
  • Java4
  • LSP1
  • Linux2
  • Redis2
  • Ruby10
  • Spring4
  • Turbo-Rails11
标签
AI AQS锁 Filter IOC IO流 Interceptor JavaScript LSP Mysql OOP Promis RMI RPC Rails Ruby SDK SQL Servlet Shell SpringMVC SublimeText Vue Zed electron jdbc kamal mysql opencv orm rails ruby ruby,rails rubyGem turbo 事务 二叉树 位运算 元编程 内存分配 内存溢出
归档
  • 一月 20262
  • 十月 20251
  • 七月 20251
  • 四月 20251
  • 二月 20251
  • 一月 20251
  • 十二月 20242
  • 十月 20241
网站资讯
文章数目 :
75
本站访客数 :
本站总访问量 :
最后更新时间 :
©2020 - 2026 By 庚辰
框架 Hexo|主题 Butterfly
陕ICP备2022014054号
搜索
数据库加载中