0

我希望我能弄清楚我正在努力解决的问题:-) 来了。我想知道如何在以下情况下实施 SRP:

有一个项目。完成后,必须向联系人邮寄一份调查问卷,他在其中就项目的进展情况提供反馈。

该软件具有项目级。有一个循环遍历所有项目的过程。我已将所有用于邮寄的代码拆分到一个名为 ContactMailer 的类中,该类将项目作为参数,类似于 ContactMailer.AttemptMail(project);

但是在某些情况下不发送邮件:项目标记为 DoNotSurvey,或标记为 Challenged(= 有人质疑不应发送邮件,管理员必须对此做出决定),如果没有此类项目的有效调查。

我的问题是:这个检查可能在 CheckMailConditions 之类的过程中,但是这个过程属于哪里?它应该在 de ContactMailer 中吗?这感觉有点不对劲,尽管它是检查是否应该发送邮件。或者它应该是一个单独的类?这听起来像 SRP(一个有一个职责的类:检查条件),但这会导致一个类使用一种方法,这似乎有点过头了。

或者我是否应该在调用 ContactMailer.AttemptMail 之前检查这些条件,因为它们是项目的属性?我有点迷路了。

提前感谢您的想法!

4

1 回答 1

0

我不认为你通过在你的ContactMailer班级中包含检查来打破单一责任规则。如果项目满足某些条件 ,它将承担发送邮件的单一责任。

具有单个方法的类不一定是矫枉过正,并且可能有充分的理由将检查逻辑抽象为一个单独的类,这对我来说从您的问题中并不明显。但是,从您所说的来看,我认为您的架构听起来绝对不错。

顺便说一句,如果您确实将检查逻辑分离到一个单独的类中,您会如何称呼该类?MailConditionsChecker? 根据我的经验,如果很难想出一个合理的名词来命名你的班级,这通常是一个不好的迹象。

于 2013-08-07T23:49:21.263 回答