我想在基于以下场景的第三方服务上创建和删除用户
-
在第三方上创建用户
- 在应用程序中创建用户时
- 从
inactive
标记为active
(我在我的用户模型上有一个名为is_active
的列(
-
删除第三方上的用户
当用户从应用程序中删除时 - 标记为
inactive
看起来我可以使用after_commit
回调,但我如何在after_commit
中识别该操作是create
、update
或delete
这方面的任何帮助都会有所帮助。
不要为此使用回调——你会后悔的。
回调的主要问题是:
- 没有上下文——你实际上根本不知道应用程序中发生了什么
- 很难控制回调何时真正启动——更重要的是,当您不希望它启动时(例如加载fixture时(
- 这让模特承担了太多的责任
- 您不能在创建/更新/销毁记录的同时测试回调逻辑
当您似乎也在处理第三方API时,我真的不能低估这一点。当您接触应用程序边界时,使用像回调这样的隐式机制是一个非常糟糕的主意。通过一种方法来处理所有内容的想法也不合理。
相反,您可以使用诸如服务对象之类的模式来处理";转换";模型的。
class UserCreationService
def initialize(user)
@user = user
end
def perform
# do something with @user
end
end
class UserInactivationService
def initialize(user)
@user = user
end
def perform
# do something with @user
end
end
它们只做一项工作,很容易测试,只有当你明确希望它们启动时才会启动。ActiveJob实际上就是这种模式的一个例子。