Oop 这些方法中有一种或两种都遵循单一责任原则吗?
我有一个Oop 这些方法中有一种或两种都遵循单一责任原则吗?,oop,solid-principles,single-responsibility-principle,Oop,Solid Principles,Single Responsibility Principle,我有一个学校班级,该班级有一份学生名单,学生班级有一份奖励和成绩列表,如下所示: public class School { List<Student> Students {get;set;} } public class Student { List<Grade> Grades {get;set;} List<Award> Awards{get;set;} } 以上内容包括copyStudior课程中成绩和奖励的复印。这是否遵循S
学校
班级,该班级有一份学生名单,学生
班级有一份奖励和成绩列表,如下所示:
public class School
{
List<Student> Students {get;set;}
}
public class Student
{
List<Grade> Grades {get;set;}
List<Award> Awards{get;set;}
}
以上内容包括copyStudior
课程中成绩
和奖励
的复印。这是否遵循SRP,或者最好将应对等级和奖励划分为单独的方法,例如:
CopyGrades(List<Grade> grades)
{
//Copy grades
}
CopyAwards(List<Award> awards)
{
//Copy awards
}
CopyGrades(列出等级)
{
//抄袭等级
}
文案奖(名单奖)
{
//复制奖
}
因此,上述方法将从
copyStudion
方法调用。正如Jeroen在评论中已经提到的那样,分离方法总是一个好主意,因此第二种方法乍一看似乎更好
你可能会争辩说,在某些情况下,你只是想“模仿一个学生”——不多不少。在这些情况下--您需要像第一种方法一样的copyStudior()
。另一方面,标志copyGrades
和copyAwards
有一点不正确。尽管如此,这两种方法并不一定相互矛盾。这个怎么样:
CopyGrades(List<Grade> grades)
{
//Copy grades
}
CopyAwards(List<Award> awards)
{
//Copy awards
}
CopyStudent(Student student)
{
CopyGrades(student.grades)
CopyAwards(student.awards)
}
CopyGrades(列出等级)
{
//抄袭等级
}
文案奖(名单)(罗伯特·C·马丁)
“Bob叔叔”,这一次强调人和设计(当然还有代码)
抄袭成绩和抄袭姓名之间没有区别,它们都是抄袭学生的一部分,因此在某种程度上都遵守SRP。如果它们需要多行文字来保持清晰的概述,那么将它们提取到单独的方法中会更好。@Jeroenvanevel-好的,我最初选择第二种方法是因为它很疯狂我认为代码更干净,可读性更强,你似乎同意这一点,对吗?是的,没错。可读性是代码最重要的方面之一,其重要性怎么强调都不为过。
CopyGrades(List<Grade> grades)
{
//Copy grades
}
CopyAwards(List<Award> awards)
{
//Copy awards
}
CopyStudent(Student student)
{
CopyGrades(student.grades)
CopyAwards(student.awards)
}