로직 레이어에 대한 지원보기를 선택적으로 제공하도록 코드를 구성하려면 어떻게해야합니까?

파이

나는 이것이 stackoverflow에 속하는지 아닌지에 대해 약간 회의적 입니다. 대신 코드 리뷰 또는 프로그래머 에게 게시 해야하는지 알려주십시오 .

다음과 같은 작업을 수행하는 iOS 용 재사용 가능한 구성 요소를 작성하고 싶습니다.

  1. 숫자를 입력으로 받아 전화합시다 inputNumber
  2. 10 초 동안 또는 사용자가 녹음을 중지 할 때까지 오디오를 녹음합니다.
  3. 녹화 중에는 실시간 측정
  4. 녹음 후 제공된를 사용하여 녹음을 확인합니다 inputNumber(현재이 부분은 신경 쓰지 않습니다).
  5. 사용자가 녹음 된 오디오를 재생할 수 있습니다.
  6. 기록 된 파일의 경로를 반환합니다.
  7. 반환 YES또는 NO4 단계의 수표에 따라

GUI는 녹음 중에 오디오 미터링을 보여주는보기와 함께 두 개의 버튼 (재생 / 일시 중지 및 녹음 / 중지)으로 매우 간단합니다. 이 같은:

여기에 이미지 설명 입력

이제 싱글 톤 "관리자"클래스에서 필요한 모든 로직을 구현했으며 GUI도 제공하고 싶습니다. 즉, 소비자는 버튼 활성화 / 비활성화, 미터 표시 / 숨기기 등에 대해 신경 쓰지 않을 것입니다.

다른 사람들이이 "관리자"를 계속 사용할 수 있기를 바라지 만 (그리고 아마도 싱글 톤이되지 않도록 리팩토링 될 것입니다) 동시에 "드롭 인"으로 사용할 수있는 옵션을 제공하고 싶습니다. 전망.

그래서 이것은 전체 아키텍처를 어떻게 설정할 수 있는지에 대한 질문입니다.

지금 제 관리자에게는 한 가지 방법 만 있습니다.

typedef void(^CompletionBlock)(BOOL isValid, NSString* filePath, NSError *error);

-(void)evaluateRecordingForInputNumber:(NSNumber *)inputNumber completion:(CompletionBlock)completionBlock;

그리고 이것은 내가 원하는대로 작동합니다.

하지만 뷰를 소개하면 API가 어떻게 보일까요? -init이상적으로 inputNumber평가해야하는 다른 모델 클래스 (를 제공 )에 대해이 뷰를 재사용하고 싶기 때문에 앞서 언급 한 방법의 역할을 수행 할 사용자 지정 UIView를 작성하는 것이 옳지 않은 것 같습니다 .

어떻게 사이에 서브 클래스를 선택할 수 있습니다 NSObject, UIControl또는 UIView내 경우에? 내 "엔진"을 독립형 구성 요소로 사용하고 선택적으로 지원 뷰 레이어를 제공하는 좋은 방법이 있습니까?

Msencenb

이 커플 링은 사용자 정의보기 / 관리자를 사용하는 방식에 크게 의존한다고 생각합니다.

사람들이 뷰없이 사용할 수있는 논리가 많을까요? 뷰는 옵션 기능일까요? 그렇다면 NSObject를 하위 클래스로 만들고 뷰를 관리자 자체의 속성으로 증명하는 것이 합리적 일 것입니다. 이런 식으로 사람들은 관리자 클래스를 독립형으로 사용할 수 있으며 필요한 경우 UIView에서 다음과 같은 작업을 수행 할 수 있습니다.

[self.view addSubview:myCustomManager.audioView];

반면에 관리자 클래스가 UIView 자체없이 사용자에게 아무런 가치가 없다면 UIView를 하위 클래스로 만들고 해당 UIView 뒤에 관리자 클래스를 숨기는 것이 합리적이라고 생각합니다. 이 스타일의 구현을 사용하는 위젯의 한 예는 stripe : Stripe iOS Widget 입니다. 모든 것은 충전 토큰을 검색하는 것과 같이 'STPView'를 기반으로합니다.

[self.stripeView createToken:^(STPToken *token, NSError *error) {
    if (error) {
        // Handle error
        // [self handleError:error];
    } else {
        // Send off token to your server
        // [self handleToken:token];
    }
}];}

모든 작업을 수행하는 stripeView의이면에있는 개인 '관리자'클래스를 상상할 수 있습니다 (이 메서드는 대리자 콜백에 추가됨).

귀하의 경우 이것은 상당히 좋은 패턴 일 수 있습니다. 평가할 번호에 대한 속성을 사용자 지정보기에 추가하고, 계층 구조에보기를 추가 한 다음 작업을 처리 한 후 자동으로 다시 호출하는 사용자 지정 대리자를 만들 수 있습니다. 관리자 클래스 콜백을 대신합니다.

최종 답변은 이것이 제공하는 비즈니스 로직과 UIView 간의 분할 정도에 따라 크게 달라진다는 것입니다. 코드를 읽을 수 있고 유지 관리 할 수 ​​있고 따라야 할 합리적인 패턴이있는 한 iOS 영역에서 누구도 당신을 십자가에 못 박을 것이라고 생각하지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관