我最近一直在閱讀Single Responsibility Principle
概念,理論上我很同意它。我很難說明哪些代碼可以被嚴格分類爲違反該原則。我想實施這個原則,以便推動測試驅動開發。代碼遵守單一責任原則和單元測試
採取:
public void MarkAsSuccessful(PaymentMethodSpecific paymentMethod, bool requiresManualIntervention)
{
this.Paid = true;
this.PaidOn = CS.General_v3.Util.Date.Now;
this.PaidByPaymentMethod = paymentMethod;
this.RequiresManualIntervention = requiresManualIntervention;
this.Update();
this.CreateAndSendNotificationRegardingImmediatePayment();
this.SendPaymentSuccessfulEmails();
}
這被放置在稱爲PaymentRequest
類,它基本上是處理在電子商務應用有關付款邏輯的類。上述方法將請求標記爲「成功」。這必須標記已付費欄目以及其他信息,併發送通知表示已成功,併發送電子郵件。
例如,當涉及到單元測試時 - 單元測試這種方法非常困難,因爲我無法知道通知是實際創建和發送的,還有付款電子郵件已發送。想知道在SRP概念上有多少經驗豐富的人會接近這樣一個例子。
這裏您可能會遇到更深層次的問題。你明白爲什麼名爲'CreateAndSend ...'的方法會違反SRP嗎? –
@AustinSalonen我明白你的意思了,我不同意:如果他總是創建**和**發送通知會怎麼樣?如果該方法只是調用其他兩種方法,那就沒有問題。 SRP一個非常常見的錯誤是試圖在100%的時間內應用它。 –