나는이 파와 동의하지 않는 경향이 있습니다. 튼튼한.
우선 코어 데이터를 구현 세부 사항으로 처리하려고 시도합니다. 구현 세부 사항은 좋은 외관 뒤에 숨겨져 있어야합니다. 외관은 내 모델 객체에 대해 공개하는 인터페이스입니다. 예를 들어 두 개의 모델 객체가있는 경우; Cource
및 Student
이면 모든 리소스에 많은 학생을 보유 할 수 있습니다. 컨트롤러가 술어를 설정하고 설명자를 정렬해야하는 의무를 맡기를 원하지 않고 특정 클래스의 학생 목록을 얻으려고 모든 핵심 데이터 고리를 건너 뛰고 싶습니다. 모델에이 문제를 드러내는 완전히 유효한 방법은 다음과 같습니다. 그런 다음 Model 클래스에서 추악한 것들을 구현합니다. 핵심 데이터의 모든 복잡한 세부 사항을 숨기고 관리 대상 객체 컨텍스트를 전달할 필요가 없습니다. 하지만 어떻게 소스를 찾을 수 있을까요, 어딘가에 시작해야합니까? 예, 그렇습니다 만 컨트롤러에 표시 할 필요는 없습니다. 이와 같은 메소드를 추가하는 것도 매우 합리적입니다.
@interface Cource (CourceAccess)
+(Cource*)caurceByID:(NSString*)courceID;
+(NSArray*)allCources;
+(NSArray*)courcesHeldByTeacher:(Teacher*)teacher;
@end
이렇게하면 컨트롤러 간의 종속성을 최소화하는 데 도움이됩니다. 모델과 컨트롤러 간의 의존성을 줄입니다.
-(id)initWithManagedObjectContext:(NSManagedObjectContext*)moc
student:(Student*)student;
: 나는
CourceViewController
이 있고
StudenViewController
내가 외관 뒤에 코어 데이터의 세부 사항을 숨기고뿐만 아니라 관리되는 개체 컨텍스트 주위에 통과 한 후 나는이 같은 지정된 초기화로 끝날 것입니다 싶어하지 않았다입니다 가정
는 반면 좋은 좋은 외관과 나는이와 끝까지 :
-(id)initWithStudent:(Student*)student;
의존성 주입에 찬성, 외관 뒤에 종속성을 최소화도 훨씬 쉽게 내부 구현을 변경할 수 있습니다. 관리 대상 객체 컨텍스트를 전달하면 각 컨트롤러가 기본 작업을 위해 자체 논리를 구현할 수 있습니다. 예를 들어 studentsSortedByName
메소드를 가져옵니다. 처음에는 성/이름별로 정렬 할 수 있습니다. 나중에 성/이름 정렬로 변경하면 학생을 분류 한 모든 컨트롤러로 이동하여 변경해야합니다.좋은 외관 방법은 한 가지 방법으로 변경해야하며 모든 컨트롤러는 자동으로 무료로 업데이트를받습니다.
Apple이 어디에 동의하지 않는지 나는 알지 못합니다. 단지 한 걸음 더 나아가 문맥을 숨기고있는 것뿐입니다. 뷰 컨트롤러가 앱 델리 게이트 또는 다른 싱글 톤에서 학생 또는 코스 목록을 가져 오도록 옹호하지 않겠습니까? – Caleb
@Caleb - 응용 프로그램 대표자가 아니라, 'Course'클래스의 클래스 메서드에서 코스 목록을 가져 오는 것을 부끄럽지 않을 것입니다. 클래스를 싱글 톤의 단일 클래스로 취급합니다. – PeyloW
나는 정렬과 술어가 모델 계층에 속한다는 것에 동의하지 않는다. 정렬 W 술어는 인터페이스에서만 필요하므로 제어기에 속합니다. 모델에 정렬 및 조건자를 넣으면 특정 인터페이스에 모델이 연결되고 앱이 처리하는 실제 개체, 이벤트 또는 조건에 대한 모델 시뮬레이션의 논리적 무결성이 오염됩니다. – TechZen