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)
    }