2011-12-07 4 views
0

소개클래스를 전달하는 것과 인스턴스를 전달하는 것; 간단한 API 디자인

내가 설명하려고 오전 API/라이브러리는 매우 간단하고, 정말 문제가 내가 작업 얻을 무엇을하지 않습니다,하지만 난 결국 많은 설계 할 수 있도록 노력하겠습니다 알고 더 복잡한 시스템을 사용하고 있으며 간단하고 효과적인 API를 설계하는 방법에 대해 좋은 연습을하고 싶습니다.

내가 (끊임없이 연습 새로운 'API'디자인 실험) 내가 코드의 일부는 더 재사용하기 위해 얼마 전에했던 안드로이드 프로젝트를 재 작업하고

정보.

이 간단한 앱의 일부는 화면 텍스트를 뒤적 거리며 셔플 효과가있는 '라이브러리'를 기반으로하는 세 가지 프로그램이 있으므로 실제 코드를 일반 라이브러리로 가져 와서 분리합니다 나머지 시스템으로부터의 셔플 링의 구현. 이 작업을하기 위해 몇 가지를 변경했습니다. 셔플 링을 처리하는 코드가 클래스에 넣어졌으며 각 응용 프로그램은 특정 응용 프로그램을 실행하는 데 필요한 값으로 채워진 구성 객체를 제공합니다. 현재 디자인 하에서, 구성 객체는 원하는 셔플 구현의 클래스를 제공한다. 그런 다음 필요에 따라 라이브러리는 나중에 클래스의 인스턴스를 만듭니다.

내 라이브러리가 객체의 모든 것을 제어하고 인스턴스의 외부 코드로의 노출을 제거 할 수 있기 때문에이 기능이 마음에 들었지만 생성자 매개 변수 (셔플, 방향 등의 속도)를 사용하여 구현을 사용자 정의 할 수 없었습니다. (이것에 대한 한 가지 해결책은 구현이 라이브러리에 의해 생성 될 때부터 데이터를 가져올 수있는 일종의 배열을 전달하는 것입니다. 그러나 어떤 종류의 흐리고 딱딱한 클래스에서 매개 변수를 전달해야하는 라이브러리가 싫습니다. 체크에 컴파일 시간 설정의 쓰레기처럼 "속도 : 90; HERP : DERP".)

내 질문은

이 라이브러리가 그것의 제어 할 수 있도록 구성 클래스를 전달하는 가장 좋은 것입니다 전체 라이프 사이클, 또는이 비실용적이며 나는 단지 저주 인스턴스를 만들어 그것을 전달해야합니다. 또한 클래스를 통과하는 것이 비현실적인 경우 클래스를 좋은 생각으로 전달할 때? (어떤 종류의 플러그인 시스템에서 조회를 위해 일종의 맵에서 클래스 인스턴스를 클래스에 등록하는 것 외에)

답변

0

DI (Dependency Injection)를 사용하면 객체의 라이프 사이클이 도서관. 라이프 사이클이 매우 간단하고 구성 요소를 구성 할 필요가 없다면이 방법을 선호합니다.

+0

안드로이드에서의 라이프 사이클이 '정상적인'디자인 구현 능력을 크게 제한한다고 생각하기 시작했습니다. 그리고 필자는 결국 값/유형 (설정이 인터페이스를 기반으로 함)을 사용하여 라이브러리에 도착하는 구성 객체를 제공하는 것이 수동으로 종속성을 주입하는 것 (http://en.wikipedia.org/wiki/Dependency_injection#Manually_injected_dependency)이라고 생각했습니다. 또한 재미있는 사용자 끝 구성 옵션을 위해 구성을 즉시 변경할 수 있습니다. –

관련 문제