2011-10-28 3 views
2

구현해야하는 쿼리 API에 대한 요구 사항이 매우 간단합니다.깨끗한 API 인터페이스를 설계하는 방법은 무엇입니까?

그래서, 나는 자료 구조를 조회해야하고, 클라이언트의 관점에서, 그것은처럼 :

Select * where idValue=baseball and child.age<10 and child.city=Sydney 

이제

(그리고 데이터베이스에 추가 다른 미래의 인수를 지원한다), 어떻게 (예를 들어, enum = idValue, age, city를 사용하여) 사용자에게 깨끗하고 우아하고 분명한 java 인수에서 이러한 형태의 쿼리를 실현할 수 있습니까?

내 생각 : Map<QUERY, VALUE>이 효과가 있습니까? 그러나 나이를 어떻게 지정합니까? < 10 세 이상입니까?

내 클라이언트 인터페이스 :

List<Child> getChildern(x); 

여기서 X = 위에서 언급 한 선택 쿼리.

참고 : How to Design a Good API and Why it Matters

은 Usecase : 나는 백엔드 데이터베이스 (임베디드 응용 프로그램) 나는 개발자에 대한 액세스를 제공 할 수 있습니다. 내 응용 프로그램은 데이터를 채 웁니다. 그러나 해당 데이터는 API 사용자가 쿼리 할 수 ​​있어야합니다. 이제 데이타베이스는 데이타 객체를 저장하는 맞춤 방식을 가지고있는 버클리 db입니다.

+0

귀하의 질문이 너무 일반적입니다. 어떤 데이터 구조입니까? 가장 중요한 것은 유스 케이스인가? – viktor

+1

사용 사례가 업데이트되었습니다. – John

답변

0

음, 귀하의 질문에 너무 일반적인 터치, 실제 대답은 SO 대답에 적절한 것보다 훨씬 더 많은 공간이 필요합니다. 그러나 필자는 Spring-Ldap의 Fileter API를 살피는 것이 좋습니다.

http://static.springsource.org/spring-ldap/docs/1.2.0/api/spring-ldap/org/springframework/ldap/filter/package-summary.html

: 그것은 당신이 봄 물건에 대해 말할 수있는 지금까지 무엇 때문에 여기에 구현하지만, 단지 기본 개념에 집중하고 거기에서 가고 싶은 것을 더 포함 할 수 있습니다, 그것은 certanly 좋은 깨끗한 간단한 API를 가지고 "<"와 ">"체인지를

List<Child> getChildern(String idValue, String ageConstraint, String city); 

당신은 "="당신이 지원하는 예를 들어 언급해야 할 것입니다 : 당신이 간단한 무언가를 원하는 경우에

http://static.springsource.org/spring-ldap/docs/1.3.x/reference/html/basic.html#basic-filters

0

당신이 뭔가를 할 수 있습니다 나이의 시작에 cters. Constraint. 당신은 그 방법에서 그것을 분석 할 것입니다.

누가 API를 사용하여 얼마나 엄격하고 유연한지를 정의하는 데 많은 영향을받습니다. 또한 나중에 쉽게 변경하는 것이 얼마나 쉬운 지 알 수 있습니다. 이것은 많은 추가 작업을 필요로하지 않는 가장 간단한 것입니다. 버그를 피하려면 더 제한적으로 만드는 것이 좋습니다.

+0

그러나 어린이를위한 2 개의 새로운 데이터 유형이 추가되면 어떻게 될까요? 나는 그것도 설명 할 필요가있다. 그 질문에 업데이트되었습니다. – John

+0

@ 존 목록에 대해 을 매개 변수로 사용하고 Constraint의 하위 클래스 인 IdConstraint, AgeConstraint 및 CityConstraint를 구현하는 방법에 대해 설명합니다. 기존 구현을 깨지 않고 나중에 더 추가 할 수 있습니다. 이 방법으로 당신은 여전히 ​​그들이 할 수있는 것을 통제 할 수 있습니다 (보안 고려 사항). – Lycha

관련 문제