2017-08-16 51 views
0

我正在写在那里用户帐户创建我想要的一系列事件发生的应用 - 送大礼,发送电子邮件,等等。我的问题是你有没有一个解决办法是什么像这样的结构性问题,依赖注入?,观察者?或者你是否创建了一个可以处理所有这些事件的方法?我们有一个用户注册服务,但是我担心我们添加更多随机依赖的事件越多。OOP建筑师一系列基于用户创建事件

+0

** **观察员:不,他们已被弃用,这是很难找到,如果观察的对象。 **注册服务**(服务对象):绝对!如果你有这种模式,你可以简单地创建将在注册服务(例如被称为其他服务对象:在'RegistrationService#perform'你可以称之为'放在userRegistration :: SendWelcomeEmail.new(self.user).perform如果自我。 user.allow_email_reception?') – MrYoshiji

回答

0

这听起来像一个良好的情况下使用ActiveRecord的回调

网址:http://guides.rubyonrails.org/active_record_callbacks.html

我读到决定哪个回调符合你的情况,然后让其中包含所有“系列活动的”担心你想要发生。此外,包括对需要它的模型的关注。

希望它有帮助!

+0

每次创建用户时,都不一定要运行回调。有些情况下数据库记录创建不等于注册。例如在单元测试中。所以,最好分离数据库操作(在活动记录中)和业务逻辑。 –

+0

欣赏输入。 –

2

有关用户注册它的价值发布一个域事件由不同的子系统来处理。因此,你的对象是完全分离的。但事件驱动架构有其价格 - 这是一种难以调试和理解的方式,需要一定的纪律。

如果脱钩不是目的,你可以用额外的行为包裹服务中使用Decorator模式:

registration_service = WellconeNotification.new(UserRegistration.new) 
registration_service.call(params) 

这里的关键思想是分离的依赖和参数。我发现为参数的依赖和方法参数使用构造函数非常方便。

这种方法意味着有点难依赖管理和亲切的服务定位器。我建议看一下干容器和干汽车宝石。

编写所有的代码在一个服务对象可能是合理的第一步,如果你没有很多的业务逻辑或仍在收集的要求。