class CreateUser
def perform(args)
user = User.create!(args)
[SendWelcomeEmail, GiveCouponIfXmas, GiveInitialCash].each do |clazz|
clazz.(args)
end
end
end
从职责的角度,“创建用户”这个业务逻辑,不应该关心是否要“发邮件”“发优惠券”等职责。所以,这个代码,让 CreateUser
有了多个职责,违反了“单一职责原则”。
另外,还违反了 Open/closed principle。因为我要想在用户注册之后,加入更多逻辑的话,使用我的设计,只需要修改 config/initializer/business.rb
里面的配置,不需要修改 CreateUser
的 perform() 方法。而你的例子,必须去修改 perform() 方法的实现。
你那样写,就把依赖写死了,不方便进行单元测试,而且违反了“单一职责”原则
是的,受到 wisper 启发
改成 .call
呢?
我们生产环境用了 rancher
Erlang 里面,进程就是对象啊,Erlang 里面的 OOP,就是面向进程编程。
好棒!
Scala 搞的过于复杂了
一直觉得原生 erlang 挺好的,所以 elixir 一直没尝试。go 和 crystal 都尝试了,都很喜欢。
目前就我们公司在用吧
在济南上班了,没有创业
Cool!
我的是 3000 端口。现在的问题就是图片不存在。
主要是我想修改一些代码,加入自定义的功能,用 docker 安装就不方便了。
好的,明白
@huacnlee NoPoint 是特殊的名字约定吗?
还有一个问题:怎么调整导航栏链接的顺序?,比如让头条在最前面?
这个生成 letter_avatars 的代码在哪里?
我看了一下 public/system 那个目录,没有 64.png
这个文件
以下是 log
Started GET "/system/letter_avatars/2/D/149_114_207/64.png" for ::1 at 2017-03-17 21:38:50 +0800
Processing by HomeController#error_404 as PNG
Parameters: {"path"=>"system/letter_avatars/2/D/149_114_207/64"}
(1.0ms) SELECT COUNT(*) FROM "new_notifications" WHERE "new_notifications"."user_id" = 2 AND "new_notifications"."read_at" IS NULL
DEPRECATION WARNING: `:nothing` option is deprecated and will be removed in Rails 5.1. Use `head` method to respond with empty response body. (called from block (2 levels) in render_optional_error_file at /Users/daqing/v8os/products/homeland/app/controllers/application_controller.rb:73)
Rendering text template
Rendered text template (0.0ms)
Completed 404 Not Found in 7ms (Views: 1.1ms | ActiveRecord: 1.0ms)
那个 PR 我看了,按照上面说的修改就好了。我用的是 ES 5
还遇到一个问题:
新注册的用户,小头像显示不出来:
对啊,但是似乎有 bug,代码我还没详细看。
我们现在都是在容器中跑 Rails,依然是用 RAILS_ENV 环境变量来指定运行环境。
是啊,你现在在哪?
现在在济南
离开北京好多年
hanami 我也在看
这个很好解决啊。这个问题就像:一个节点有多个话题,一个话题有多个评论。那么在评论里要不要存储节点 ID。
如果需要查询某个节点下的所有评论,那么就要存储。否则不用存。
但是这样的话,如果 container 迁移到别的机器上了,volume 不能自动迁移。