2012-03-09 1 views
1

링크드 나머지 API는이 자바 코드에 대한 더 나은 패턴/디자인? 사용자 검색에 대한

내 응용 프로그램이 많은 시간을 사용하려는 때문에 http://api.linkedin.com/people-search?search-param1=val1&search-param2=val2..., 나는 우리가 다른 검색 매개 변수의 값을 설정할 수있는이 같은 Search 개체를 만들려고 다음하고 형식 다음있다 메서드를 위의 형식으로 URL을 생성하려면 generateQueryUrl라는.

public class Search { 
    private String searchParam1; 
    private String searchParam2; 

    public void setSearchParam1(String val) { this.searchParam1 = val; } 
    public void setSearchParam2(String val) { this.searchParam2 = val; } 

    //Form the query url 
    public String generateQueryUrl(){ 
    String url = ""; 
    if(searchParam1 != null) { 
     url += "search-param1=" + searchParam1 + "&"; 
    } 
    if(searchParam2 != null) { 
     url += "search-param2=" + searchParam2 + "&"; 
    } 
    return url; 
}  

제 질문은 더 좋은 패턴/디자인입니까? 많은 매개 변수가있는 경우 NULL을 확인한 다음 해당 매개 변수 이름을 추가하면 값이 중복 된 코드를 추가하는 것 같습니다.

또한이 접근 방식이 좋은지 알려주세요.

+0

마지막에 여분의 기호와 같은 사소한 결함은 무시하십시오. – RandomQuestion

답변

3

저는 실제로 설계자가 실제로 "빌더"라고 생각합니다. 마지막에 반환 될 URL을 작성하고 있습니다. StringBuilder 생각, 또는 Apache의 EqualsBuilder, HashCodeBuilder 등보다 이론적 인 설명은

, http://sourcemaking.com/design_patterns/builder을 확인합니다.

자, 코드를 제대로 빌드하려면 URL과 같이 "set"메서드를 사용하지만 내부에는 Apache의 HttpComponents (ex HttpClient)을 사용하여 URL 매개 변수를 올바르게 추가합니다.

"&"을 매개 변수 중 하나의 값에 삽입하면 일반적으로이 문자를 이스케이프 처리해야하므로 쿼리 매개 변수가 엉망이 될 것입니다. 이리). 테스트되고 알려진 API (UriUtils)를 사용하는 것이 더 좋습니다.

public class SearchBuilder { 
    private URI baseUri; 
    private List<NameValuePair> parameters; 

    public SearchBuilder (URI baseUri) { 
    this.baseUri= baseUri; 
    this.parameters = new ArrayList<NameValuePair>(); 
    } 

    public void addSearchParam1(String val) { 
    if(!StringUtils.isBlank(val)) { 
     parameters.add(new BasicNameValuePair("SearchParam1", val)); 
    } 
    } 

    //Form the query url 
    public URI toURI(){ 
    URI uri = URIUtils.createURI(baseUri.getScheme(), baseUri.getHost(), baseUri.getPort(), baseUri.getPath(), URLEncodedUtils.format(parameters, "UTF-8"), null); 
    return uri; 
    } 

편집 :

그래서, 내 수업은 너무 아파치의 HttpComponents를 사용 같을 것이다 나는 "ISBLANK는"널 (null)와 매개 변수, 공백 전용 문자열의 빈에 추가되지 않도록 확인 추가 쿼리. 이제 null 만 확인하도록 변경할 수 있지만 아이디어를 얻었을 것입니다.

3

키를 매개 변수 이름 및 값으로 사용하여 값으로 유지할 수 있습니다. setter 메소드는 키와 값을 Map에 넣을 수 있습니다. 또는 값이 & 인 일반 제너레이터를 하나 가질 수 있습니다. generateQueryUrl 메소드에서 맵을 반복 할 수 있습니다.

나중 단계에서 완료되지 않은 경우 값을 URL 인코딩 할 수도 있습니다.

+0

이 내 것보다 낫습니다. thnx – RandomQuestion

관련 문제