【发布时间】:2014-08-13 13:46:39
【问题描述】:
我有一个School 班级,其中包含学生名单,Student 班级有如下奖项和成绩列表:
public class School
{
List<Student> Students {get;set;}
}
public class Student
{
List<Grade> Grades {get;set;}
List<Award> Awards{get;set;}
}
我有一种复制方法,可以将Student's Awards and/or Grades 从一个School 复制到另一个。您可以选择只处理Student to a new school or the Student and his/her Awards and/or Grades。以下哪一项跟在Single Responsibility Principle 后面,为什么跟在它后面,如果都跟在后面,为什么不跟在后面?第一个示例复制学生并获取布尔值以确定是否应复制 Grades and Awards:
CopyStudent(Student student, bool copyGrades, bool copyAwards)
{
//Copy Student
if(copyGrades)
{
//Copy Grades
}
if(copyAwards)
{
//Copy Awards
}
}
以上内容包括CopyStudent 类中Grades 和Awards 的复制。是遵循SRP 还是更好地将应对等级和奖励分成不同的方法,例如:
CopyGrades(List<Grade> grades)
{
//Copy grades
}
CopyAwards(List<Award> awards)
{
//Copy awards
}
所以上面的方法会被CopyStudent方法调用。
【问题讨论】:
-
复制成绩和复制姓名没有区别,它们都是复制学生的一部分,因此在某种程度上都遵守 SRP。如果它们需要多于几行以保持清晰的概览,那么将它们提取到单独的方法中会更好。
-
@JeroenVannevel - 好的,我最初采用第二种方式,因为它使代码更清晰,对我来说更具可读性,您似乎同意这一点,对吗?
-
是的,没错。可读性是代码最重要的方面之一,其重要性怎么强调都不为过。
标签: oop solid-principles single-responsibility-principle