비디오: 스마트폰 음성녹음 앱 기능 갤럭시s10 사용법 2024
Active Record 는 메모리 내 모델 객체의 클래스가 클래스의 지속성을 처리하는 메소드로 확장되는 간단한 패턴입니다. 다음은 PERSONTABLE이라는 테이블을 사용하여 관계형 데이터베이스에서 Person 클래스의 오브젝트를 데이터 저장소로 유지하는 예제입니다. 이것은 Person 클래스의 인터페이스 파일입니다.
@interface Person: NSObject {// 모델 속성 @private NSString * Name; @ 개인 NSString * SSNo;} - (id) 초기화; - (id) initWithOIDNameAndSSNo: (NSString *) OID: (NSString *) aName: (NSString *) aSSNo; - (NSString *) getName; - (NSString *) getSSNo; - (void) setName: (NSString *) aName; - (void) setSsno: (NSString *) aSSNo; - (void) setAsRetired; // 다른 작업 (있는 경우) -d
도메인 메서드 만이 인터페이스에 표시됩니다. 지속성에 필요한 추가 방법은 Persistable 프로토콜에 정의되어 있습니다.
typedef enum {NEW, EXISTS, CHANGED, DELETED} 상태; @protocol Persistable // 프로토콜에 필요한 속성 @required @property (copy) NSString * OID; // 데이터베이스의 고유 ID @required @property (읽기 전용) 상태; + (id) findByOID: (NSString *) OID; - (void) 삽입; - (void) 업데이트; - (void) delete; - (무효) 지속; -d
이 프로토콜은 두 가지 필수 속성을 선언합니다.
-
OID 속성: 이 속성은 영구 데이터 저장소에서 객체를 고유하게 식별하는 객체의 영구 ID를 보유합니다.
-
상태 속성: 이 속성은 객체
-
가 새로 생성되었는지 (상태가 NEW인지) 여부를 나타냅니다.
-
데이터베이스에 존재합니다 (상태는 기존 임).
-
데이터 저장소에서 가져온 후 메모리에서 수정되었습니다 (상태는 변경됨).
-
삭제 대상으로 표시됩니다 (상태는 삭제됨). 그런 다음 프로토콜은 클래스가 구현해야하는 메소드 콜렉션을 선언합니다. FindByOid 클래스 메서드를 사용하여 데이터베이스의 객체를 메모리로 가져옵니다. (이러한 메소드는
-
finder 메소드로 알려져 있으며 findByName, findBySSNo 등과 같이 여러 가지 종류가있을 수 있습니다.)이 메소드를 Person 클래스에 구현하기위한 의사 코드는 다음과 같습니다.
이 메소드의 논리는 다음과 같습니다.
Embedded SQL SELECT 문은 데이터베이스에서 객체의 이름 및 사회 보장 번호 속성을 가져 와서이 값을 로컬 변수 aName 및 anSSNo에 저장합니다.
-
-
다음으로 Persistable 프로토콜에서 Person 클래스의 다른 메소드 구현을 볼 수 있습니다. persist 메서드는 다음과 같이 개체를 데이터베이스에 저장해야 할 때마다 호출됩니다.
- (void) persist {// 개체의 상태를 확인합니다. // 새 개체 인 경우 i. 이자형. state = NEW call [self insert] // PERSONTABLE에 항목을 만들려면 // state = EXISTS는 아무 것도하지 않습니다. // state = CHANGED 인 경우 업데이트를 호출하여 데이터베이스를 업데이트합니다. // 상태가 DELETED 인 경우 delete를 호출하여 정보를 제거합니다. // 데이터베이스에서}}
persist 메소드는 상태 변수를 사용하여 객체의 지속성에 적합한 메소드를 호출합니다.
- (void) insert {REPLACE INTO PERSONTABLE (OID, NAME, SSNO) VALUES: OID: Name: SSNo …}
-
개체가 데이터베이스에서 검색되어 메모리에서 수정 된 경우 update 메서드가 호출됩니다. SSO OID =: OID …}
개체가 데이터베이스에서 검색되고 메모리에서 삭제 표시가 된 경우 삭제 (999) - (void) 업데이트 {업데이트 가능한 설정 값 이름 =: 이름, SSNO =: SSNo WHERE OID = 메서드가 호출됩니다.
-
- (void) delete {OID =: OID; …}
-
도메인 메소드와 파인더 메소드는 객체의 상태를 적절하게 설정해야합니다. 결과적으로 init는 객체의 상태를 NEW로 설정하고 findByOID는 상태를 EXISTING으로 설정하고 setAsRetired는 상태를 DELETED, setName 및 setSSN으로 설정하여 상태를 CHANGED (원래 상태가 기존 인 경우)로 설정할 수 있습니다. 에.
Active Record를 사용하여 관계형 데이터베이스에 객체를 저장하면 일반적으로 객체의 영구 변수가 해당 테이블의 필드에 매핑 된 상태로 객체가 데이터베이스 테이블에 매핑됩니다.
객체의 라이프 사이클 관리 로직은 데이터베이스에서 객체를 가져올시기를 결정하고, 데이터베이스의 동일한 객체에 해당하는 메모리에 중복 인스턴스를 허용할지 여부, 저장시기, 객체를 영구히 삭제할시기 등을 결정합니다. 응용 프로그램의 책임.