我最近一直在阅读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%的时间内应用它。 –