我希望我能说清楚我正在努力解决的问题:-) 我想知道如何在以下情况下实施SRP:
有一个项目。完成后,必须通过调查邮寄联系人,在调查中他会提供有关项目进展情况的反馈。
该软件具有项目级。有一个循环遍历所有项目的程序。 我已将所有代码邮寄到一个名为ContactMailer的类中,该类将项目作为参数,例如ContactMailer.AttemptMail(project);
但是在某些条件下不发送邮件:项目标记为DoNotSurvey,或标记为Challenged(=有人质疑不应发送邮件而管理员必须对此进行决定),以及对此类项目没有有效的调查。
我的问题是:这个检查可能在像CheckMailConditions这样的程序中,但是这个程序属于哪里?它应该在de ContactMailer中吗?虽然检查邮件是否应该发送,但感觉有些偏差。或者它应该是一个单独的类?这听起来像SRP(一个有一个责任的类:检查条件),但这会导致一个类有一个方法,这似乎有点过分。
或者我应该在调用ContactMailer.AttemptMail之前检查这些条件,因为它们是项目的属性?我有点失落。
提前感谢您的想法!
答案 0 :(得分:0)
我不认为您通过在ContactMailer
课程中加入支票来打破单一责任规则。如果项目符合某些条件,它将负责发送邮件。
使用单一方法的类不一定是矫枉过正,并且可能有充分的理由将检查逻辑抽象为一个单独的类,这在我的问题中并不明显。但是,从你所说的,我认为你的架构听起来非常好。
顺便说一句,如果你把检查逻辑分成一个单独的类,你会把这个叫做什么? MailConditionsChecker
?根据我的经验,如果很难找到一个明智的名词来命名你的班级,那通常是一个不好的迹象。