2009-12-30 3 views
0

첫 번째 프로그래밍 언어를 배우려고합니다. 불행히도 나는 아이폰을 시작하기로 결정했다. 쉬운 일이라고 생각했는데 ... 어쨌든 4 주 후에 실제로 몇 가지 작업 애플 리케이션을 가지고있어! 종류 ...올바른 객체 지향 응용 프로그램 설정

두 개의 텍스트 상자와 두 개의 레이블이있는 내 응용 프로그램 중 하나입니다. 각 사람은 카운트 다운을 위해 라벨의 텍스트를 감소시키는 타이머를 시작하는 버튼이 있습니다.

나는 두 사람의 별도의 타이머를 사용하여 변수를 증가시키고, 노래를 연주하고, 각 사람과 관련하여 일부 레이블 등을 업데이트하는 두 개의 개별 메소드를 실행합니다. 전쟁이 아니고 코드의 양에 따라 달라지는 것은 아니지만, 새로운 것을하는 방법을 찾을 때마다 두 세트를 모두 바꾸고 싶지는 않을 것입니다.

한 명당 한 세트의 코드로 작업 할 수 있도록 설정하는 것이 더 좋은 방법은 무엇입니까? 나는 전체 "사람"을 사물의 아이디어로 얻고 그것이 자신의 반원이어야하고 내가했던 모든 독서에서 그것을 아마도 하위 분류해야한다고 생각한다. 실제로 코드를 실제로 적용하는 방법을 모르겠습니다.

답변

2

내가 처음 생각하는 것은 타이머가 (거의 항상) 인터페이스의 일부이며 데이터 모델의 일부가 아니라는 것을 인식하는 것입니다. 매우 이상한 요구 사항이 없으면 타이머가 사용자 데이터 개체와 전혀 관련되어서는 안됩니다.

데이터와 인터페이스간에 엄격한 구분을 유지하려고합니다. 이것은 잘못 명명 된 Model-View-Controller 패턴의 핵심 아이디어입니다. 컨트롤러가 모델과 뷰 사이를 중재한다는 것을 반영하기 위해 Model-Controller-View라고해야합니다.

귀하의 경우 데이터 모델 인 사람 개체가있는 것 같습니다. 이상적으로,이 모델은 특정 인터페이스에 직접 연결하지 않아도 작동합니다. 우수한 데이터 모델은 표준보기, 웹보기 또는 텍스트 기반 명령 줄 인터페이스에서도 작동합니다. 모델이 표시되거나 사용되는 방식에 관계없이 데이터를 저장하거나 조작하는 것과 관련되기 때문에 모델에 관계가 없습니다.

인터페이스를 업데이트하는 타이머는 데이터와 아무 관련이 없기 때문에 컨트롤러에 속합니다. 다른 인터페이스에 표시되는 동일한 데이터에는 다른 타이머가 필요합니다. 필요할 때마다 모든 인터페이스 요소를 업데이트하는 컨트롤러의 메소드를 호출하는 타이머가 하나만 있으면됩니다. 그런 다음 컨트롤러는 데이터 모델의 적절한 객체 (사용자 클래스의 인스턴스)에서 표시해야하는 데이터를 가져옵니다.

예를 들어, 자신의 카운트 다운 번호가있는 인물이 여러 개 있다고 가정합니다. 사람 개체에 카운트 다운 값을 속성으로 저장해야합니다. 컨트롤러의 단일 타이머는 초당 한 번씩 실행되고 컨트롤러에서 메서드를 호출합니다. 그런 다음이 메서드는 각 개체의 카운트 다운 값을 요청합니다. 값을 요청하면 person 객체는 카운트 다운 값을 자동으로 감소시킵니다.

이 디자인을 사용하면 임의의 많은 수의 person 개체를 처리 할 수 ​​있습니다. 각 개체는 자신의 countdown 특성을 가지며 컨트롤러에는 하나의 타이머와 하나의 메서드 만 있습니다.

+0

그게 내가 찾고있는 해답이다! 정말 고맙습니다! –

+1

답이 맞다면 그 옆에있는 체크 표시를 눌러 시스템이 질문에 답하는 것을 알아야합니다. – TechZen

+0

머리를 주셔서 감사합니다! 이것은 내가 기술 사이트에 물어 본 첫 번째 질문입니다! 나는 몇 주 전에 여기 왔어야 했어! –

0

우리는 몇 달 또는 몇 년 동안 객체 지향 설계에 대해 이야기 할 수 있습니다. 디자인 원칙은 경험과 많은 연습을 통해 가장 잘 습득되고 마스터됩니다.

고유 한 역할을하는 1 개의 메소드를 호출하는 2 개의 타이머가 필요한 경우 2 개의 타이머가있을 수 있습니다. 두 타이머에 공통된 작업/책임이있는 경우 이러한 일반적인 작업을 구현하는 추상 타이머를 만들어보다 구체적인 동작 (메서드 구현)을 위해 확장 할 수 있습니다.

저는 많은 경우에 도움이되는 역할 기반 디자인을 찾았지만 여러분이 연습하고 물론 객체 지향과 상속의 기초를 알아야한다고 말했기 때문에 말입니다.