2017-08-16 29 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) 

這裏的關鍵思想是分離的依賴和參數。我發現爲參數的依賴和方法參數使用構造函數非常方便。

這種方法意味着有點難依賴管理和親切的服務定位器。我建議看一下幹容器和幹汽車寶石。

編寫所有的代碼在一個服務對象可能是合理的第一步,如果你沒有很多的業務邏輯或仍在收集的要求。