비교적 복잡한 코어 데이터 관계 구조가 있는데 값 의존성 (또는 관측)을 설정하는 방법을 파악하려고합니다. 다양한 일대 다 관계. 기본적인 정보로 시작하겠습니다. 학생, 과제 및 성적 (학생 X 과제)이 포함 된 강의실이 있습니다. 간단히하기 위해 우리는 아직 과제에 많은 것을 집중할 필요가 없습니다.일시적인 코어 데이터 속성에 대한 "대다수"관계 값 종속성 설정
StudentObj <--->> ScoreObj <<---> AssignmentObj
각 ScoreObj은 StudentObj 및 AssignmentObj와 일대일 관계를 갖는다.
- ScoreObj에는 숫자 등급, turnInDate 및 노트에 대한 실제 속성이 있습니다.
AssignmentObj.scores는 해당 과제 (N = 모든 학생)에 대한 점수 개체 집합입니다.
- AssignmentObj에는 이름, dueDate, curveFunction, gradeWeight 및 maxPoints에 대한 실제 속성이 있습니다.
StudentObj.scores는 해당 학생의 점수 개체 집합입니다 (N = 모든 과제).
- StudentObj도 등 이름, studentID, 이메일과 같은 실제 속성이
- StudentObj이 gradeTotal라는 과도 (계산하지 저장) 속성이 있습니다.
이 마지막 항목 인 gradeTotal이 실제 피클입니다. 모든 과제, 점수, 곡선, 최대 점수 등의 점수 (ScoreObj)를 사용하여 학생의 전반적인 학년을 계산합니다.
이 gradeTotal 등급은 전체 학생과 개별 과제 성적과 함께 표의 열에 표시됩니다. gradeTotal의 값을 결정하는 것은 비교적 큰 값인이 특히 비싸기 때문에 입니다. 따라서 필요한 경우에만 실행하고 싶습니다. 단순함을 위해 핵심 데이터 모델에서 해당 등급의 총 가치를 저장하지 않습니다. 나는 그것을 어딘가에 캐싱하는 것을 꺼리지 만, 캐시를 가장 잘 업데이트 할 수있는 곳과 방법을 결정하는 시간을 갖고있다.
각 학생의 gradeTotal에 영향을주는 값이 변경 될 때마다 해당 계산을 실행해야합니다. 이것이 단순한 to-one 관계라면, 나는 과 같은 것을 사용할 수 있음을 안다. keyPathsForValuesAffectingGradeTotal ... 그러나 many-to-one-to-many 관계와 비슷하다. 누구든지 우아한 (그리고 KVC 올바른) 솔루션을 알고 있습니까? 나는 모든 점수와 과제물을 찢어 내고 학생을 관찰자로 등록하라고 말할 수 있습니다. 그러나 이것은 둔기력 접근법처럼 보입니다.
나는이 접근 방식을 좋아한다. 이전에 구현 한 관찰 결과의 쥐의 둥지보다 훨씬 더 우아합니다. –