2010-03-08 3 views
2

MVC 디자인 패턴을 사용하여 간단한 모델을 만드는 중입니다. 모델에서 웹에서 데이터에 액세스하여 이후 컨트롤러에 표시 할 수 있습니다.MVC 모델 구현?

약간의 연구가 끝나면 내 모델을 싱글 톤으로 구현하여 내 컨트롤러에서 공유 인스턴스로 액세스 할 수 있다고 결정했습니다.

싱글 톤에 대해 더 많이 읽을수록 더 나은 해결책이없는 상황이 거의 없다는 것을 사람들이 더 많이 알게되었습니다.

싱글 톤을 사용하지 않으면 내 모델 클래스를 어디에 만들지 혼란 스럽습니다. appDelegate를 통해이 작업을 수행하는 것에 만족하지 않으며 viewController에 배치 할 수없는 것 같습니다.

모든 의견이나 포인터가 많이 감사하겠습니다.

EDIT_001

:

TechZen은, 대단히 감사합니다 (항상 환상적인 대답은) 나는 그것을 허용하기 전에 질문 하나 개 더 비트를 추가 할 수 있습니다. 앱 종료시 싱글 톤 할당 해제에 대한 생각은 무엇입니까? 나는 이것이 어쨌든 앱이 종료 될 때 지워질 것이므로 객체 해제가 객체 해체에서 호출되지 않는다는 것을 확실히 알고있는만큼 이것이 얼마나 중요한지 잘 모르겠습니다. 명백하게 NSApplicationWillTerminateNotification을 사용하여 공유 인스턴스를 등록 할 수 있습니다.

게리 그들은 종종 학대 때문에 다시 싱글의 사용에 밀어 많이 있습니다

+0

EDIT_001에 대한 답을 찾았습니다. "목표 C의 싱글 톤은 보통 프로세스가 종료 될 때 메모리가 OS에서 회수 될 때까지 인스턴스화를 통해 생성됩니다."그러면 대답이 받아 들여지는 것으로 표시됩니다. 다시 한번 감사드립니다. – fuzzygoat

답변

8

. 게으른 코더는 (1) 싱글 톤에 충분한 기능을 넣지 않아 스파게티 같은 다른 객체에 로직이 확산되거나 (2) 싱글 톤이 전체 프로그램이되도록 많은 기능을 넣습니다. 게으른 코더는 종종 데이터 유효성 검사, 객체 테스트 및 객체 추적 대신에 싱글 톤을 사용합니다. 사람들은 싱글 톤 사용을 억제하기 위해 게으른 싱글 톤 사용을 해독하고 유지하려고 노력하는 것에 지쳤습니다.

나는 충동을 철저히 이해하며 나 자신이 의식적으로 싱글 톤 남용에 대해 경고한다.

그러나 데이터 모델은 싱글 톤에 대한 몇 가지 합법적 인 용도 중 하나입니다. 이것은 특히 모바일에서 실행되는 것과 같은 작은 응용 프로그램에 해당됩니다. 결국 데이터 모델에 싱글 톤을 사용하거나 싱글 톤에 연결합니다.

예를 들어, 비표준 데이터 모델 개체를 앱 대리인에 지정한다고 가정 해 봅시다. 자,이 작업을 수행했습니다 : dataModel -> appDelegate -> application (singleton). 액세스하려면 부를 것이다 :

[[[UIApplication sharedApplication (a singleton)] delegate] theDataModelObj]; 

을 당신은 여전히 ​​싱글의 속성으로 시작 obj에 데이터 모델을 가지고해야합니다 이의를 개체에서 토큰처럼 주위를 통과하더라도.

개체가 실제로 "하이랜더"패턴 ("하나만있을 수 있습니다!")을 충족시켜야하는 경우에는 싱글 톤이 최상의 선택입니다. 응용 프로그램 개체 외에도 파일 관리자뿐만 아니라 단독 개체로 사용자 기본값이 있습니다. 분명히 세 가지 경우 모두 전체 앱에 대해 인스턴스가 하나만 존재해야합니다. 예를 들어 둘 이상의 사용자 기본 객체가있는 경우 앱은 열차 설정으로 모든 환경 설정을 추적하려고합니다. 파일 관리자가 두 개 이상인 경우 파일 작업이 서로 진행될 수 있습니다.

올바르게 설계된 사용자 데이터 모델은 사용자 기본값의 더 큰 버전입니다. 사용자 데이터를 직접 조작하는 유일한 개체 여야합니다. 앱의 다른 객체는 최소한 그 작업을 가져야합니다. 따라서 싱글 톤 디자인 패턴이이 특별한 경우에 사용할 최상의 패턴이됩니다.

싱글 톤은 매우 강력한 도구이지만 물리적 도구를 사용하는 것처럼 강력 함에도 불구하고 부주의하게 사용하면 머리를자를 기회가 더 많이 생깁니다. 이러한 이유로 싱글 톤이 거의 선택의 여지가 없어야합니다. 일반적으로 더 나은 디자인 패턴이 있습니다.

그러나 실제로 싱글 톤이 필요할 때는 다른 사람의 게으름 때문에 나쁜 담당자가 되었기 때문에 사용하지 않아야합니다.

강력하고 위험한 도구를 사용하지 않을시기를 알고있는 것은 경험으로 개발 한 프로그래머의 직감의 일부입니다. 수식으로 갈 수는 없습니다. 좋은 코딩을 예술로 만들고 프로그래머를 장인으로 만드는 요소 중 하나입니다.