Методы в классе ученика, которые нарушают закон Деметры:
private Grades getGradesForYear( int year )
private Teacher getTeacher( int year )
потому что они выставляют доменные объекты Grades и Teacher к приложению.
Предполагая, что вы хотите продолжать скрывать оценки внутри ученика, а учителя - внутри классов, один из способов решения этой проблемы - определить прокси-методы (также называемые методами делегатов) в классе Student, которые работают с внутренними оценками и учителем объекты от имени приложения, аналогично методу Student.isTeacher(int, String)
. Это решение может привести к дублированию методов в классах и «Учитель в ученике», что является недостатком дизайна класса, который соответствует LofD.
Лучшим решением было бы убрать оценки и учителя из учеников и поместить их всех в другой класс, скажем, расшифровка:
class Transcript {
Student student;
Teacher teacher;
Grades grades;
Integer year;
}