Ruby China 很成熟了,再搞一个要费很多时间
就是版本问题呗?换成最新版本就解决了
搞一个 Golang 的本地开发者社区,在深圳。
深圳的 Gopher 可以加入:https://www.meetup.com/Golang-Shenzhen/
超,厉,害,给你打 99.5 分,剩下 0.5 分怕你骄傲。
超棒,加油!!
Do you accept remote jobs?
没有 Ruby 职位啊?
用 docker
JIRA 用的正版还是破解版?
有人用 golang 写了一个:gopa
还招人吗?
发中文简历可以不?
还招人嘛
我叫张庆城,邮箱 [email protected]
联系你们了,没人回。。
投了简历,2 天了都没有回复。。
redis 可以配置持久化
主要是更新了 API 设计。
Fanli.when(:create_user, exec: proc { |args| # business logic goes here })
Fanli.trigger(:create_user, with: {name: 'daqing'})
class CreateUser < Fanli::Base
def perform
# business logic goes here
end
end
调用方法:
CreateUser.exec(name: 'daqing', age: 30)
和 wisper 本身没什么优势,但是后面准备添加 sidekiq 支持。wisper 的 sidekiq gem,已经很久不维护了。
并不一定放在 initializer 下面,也可以放到 app/business/registry.rb
里面
其实我这个就是 service 啊,只是没有用 XXXService
来命名。而是用了动词 + 名词的方式。
那对于这类需求,有没有不是意大利面条的写法?
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,就是面向进程编程。
好棒!