2011-03-01 1 views
4

나는 AppDelegate이라는 객체를 만들고 내 프로그램 전체에서이 객체를 사용하고 있으며, 모든 setter와 getter를 선언하고 거기에있는 데이터베이스의 쿼리를 삽입, 선택, 삭제, 업데이트했다.데이터 조작 및 처리를 위해 AppDelegate를 사용하는 것이 좋습니다.

그래야한다면 예, 그렇다면 어떻게, 그리고 없다면 왜 좋은 연습이 아닌지 묻는 것이 좋습니다.

내 질문에 답변이 되었기를 바랍니다. 질문이 있으시면 관련 질문을하십시오.

답변

8

AppDelegate를 백만 가지 방법과 속성을 포함하는 "큰 진흙 투성이"로 바꾸는 것은 좋은 전략이 아닙니다 (유혹을 불러 일으킬 수도 있음).

잘 디자인 된 객체로 기능 비트를 분류하는 더 나은 객체 지향 접근 방식 - 예를 들어 모든 데이터베이스 상호 작용을 처리하는 DatabaseManager 클래스가있을 수 있습니다. 그런 다음 DatabaseManager가 응용 프로그램 대리인 인스턴스에 DatabaseManager에 대한 참조를 요청해야하는 응용 프로그램이있을 수 있습니다.

또는 DatabaseManager에 대한 참조를 필요로하는 앱 부분으로 전달할 수 있습니다. 그러나이 마지막 접근 방식은 더 많은 '인터페이스 오염'을 야기합니다. 여기서는 DatabaseManager를 전달하기 위해 많은 장소에서 인터페이스를 수정해야합니다.

또 다른 대안은 효과적으로 DatabaseManager 자체를 '싱글 톤'으로 만드는 것입니다. 즉, 클래스의 인스턴스 메소드가 클래스의 클래스 메소드를 통해 액세스됩니다. 이런 방식으로 작동하는 싱글 톤은 대개 싫은 소리를 내며 대개 좋은 이유가 있습니다 (테스트를 더 어렵게 만듭니다.). 개체에 '싱글 톤 (singleton)'속성이있는 것을 피하는 경향이 있습니다. 원하는 종류의 액세스가 필요할 경우 '선호하는 지점'(원하는 경우 '일종의'종류)을 사용하는 것이 더 좋습니다. 공유 인스턴스를 얻을 수 있습니다.

2

모든 것이 복잡하고 자신의 감정에 관한 것입니다. 당신은 당신의 솔루션을 좋아해야합니다 ;-)

분명히 다른 방식으로 이것을합니다 - 저는 모든 공통 데이터베이스를 처리하는 싱글 톤을 가지고 있습니다. 가능한 한 간단하게 응용 프로그램 위임을 유지하려고합니다. 코드 공유 등을하는 것이 더 좋습니다.

+1

그리고 다른 사람들은 나중에 같은 코드에서 작업하는 경우 자신의 솔루션을 좋아해야합니다. – occulus

4

Appdelegate에서 처리하는 대신 글로벌 싱글 톤 클래스를 만드는 것이 가장 좋은 방법이라고 생각합니다.

모든 세터와 getter를 선언하고 프로젝트 전체에 싱글 톤 객체 핸들을 사용하십시오. 이 링크보기 작성 방법 singleton class

데이터베이스의 경우 DataAccessLayerClass를 작성하십시오. 언제든지 쿼리를 실행하여이 클래스에 액세스 할 수 있습니다. 이 클래스 메서드는 데이터로 입력을 가져야하며 쿼리를 만들고 해당 쿼리를 실행하고 데이터를 반환합니다.

+1

싱글 톤 패턴은 여러분이 언급합니다 - 객체가 '구운'싱글 톤 속성을 갖는 곳은 상당히 제한적입니다. 나중에 두 개의 데이터베이스에 연결하기 때문에 두 개의 데이터베이스 관리 프로그램 오브젝트가 필요하면 어떻게됩니까? 테스트 목적으로 하나 이상의 인스턴스가 있어야하는 테스트를 작성하면 어떻게됩니까? 구성된 공유 싱글 톤 인스턴스를 전달하는 일종의 팩토리를 제공하는 것이보다 유연합니다. 그냥 내 의견. – occulus

+0

또 다른 문제점 : 좋은 디자인은 구성 정보를 데이터베이스 관리자 (또는 무엇이든)로 넘겨주는 것입니다 (테스트 등 이유로).그러나 모든 코드가 공유 인스턴스에 대한 싱글 톤 객체 자체에 요청하면 까다로워집니다. 필요한 경우 getInstance에 대한 모든 호출이 구성 정보에서 전달되어야하므로이 인스턴스는 공유 인스턴스에 대해 요청합니다. – occulus