2016-02-18 46 views
-1

我試圖尊重保持我的代碼乾燥的紅寶石原則;然而,在我的條件下,我有不同的常數設置爲不同的日子。但這是唯一不同的。他們幾乎是相同的代碼減去天from_now的評估。這不遵守DRY原則嗎?

if term_type == TERM_MONTH 
    MONTHLY_WARNING_1.from_now && send_notice 
else 
    ANNUAL_WARNING_1.from_now && send_notice 
end 

我試過使用三元運算符;然而,它並沒有產生我期待的結果,因爲它只根據term_type設定日期,但不能根據它發送郵件。

days = term_type == TERM_MONTH ? MONTHLY_WARNING_1 : ANNUAL_WARNING_1 
days.from_now && send_notice 

一個正確的方向將是有幫助的。 TIA。

已更新,以消除噪音。

+0

有很多的業務邏輯在這裏我們不得不推斷,如果你只是想重構,可能更適合CodeReview。 – Anthony

+0

@Anthony我已經刪除了噪音。道歉。 –

+0

我已將此移至CodeReview ...感謝您的建議。 –

回答

1

你必須首先確保你明白,&&意味着什麼以及如何使用它。

在您的代碼段這兩條線將進行評估,以僅發送通知,因爲無論你有任何MONTHLY_WARNING_1.from_nowANNUAL_WARNING_1.from_now是truthy(除非它是falsenil)。

我想你會(通過移動一些邏輯到它自己的方法分割碼成較小的塊)被希望是這樣的:

def warning 
    term_type == TERM_MONTH ? MONTHLY_WARNING_1 : ANNUAL_WARNING_1 
end 

warning.from_now # first set warning or whatever it does 
send_notice  # now send the notice