2017-02-13 8 views
1

null可能なクエリパラメータを持つリソースがあります。 DB(GAE DataStore)から関連するエンティティを返却したい 私はそれを行うためにもっと短いか、よりきれいな方法を持っていますか?Objectify - nullでない場合はフィルタを設定します。

これは私のコードです:

var query: Query<Kind> = ObjectifyService.ofy().load().type(Kind::class.java) 

if (name != null) { 
query = query.filter("name ==", name) 
} else if (gender != null) { 
query = query.filter("gender ==", gender) 
} else if (address != null) { 
query = query.filter("timing ==", address) 
} 

return query.... 
} 

答えて

1

残念ながら、客観化には、そのような事はありません。

あなたがフィルターに使用するための多くのパラメータを持っている場合は、一般的なアプローチがbuilderパターンです:

public class QueryBuilder { 
    public static final Class<Kind> TYPE = Kind.class; 
    private Query<Kind> query; 

    public QueryBuilder() { 
     query = ofy().load().type(TYPE); 
    } 

    public QueryBuilder name(String name) { 
     return setIfNotNull("name", name); 
    } 

    public QueryBuilder gender(String gender) { 
     return setIfNotNull("gender", gender); 
    } 

    public QueryBuilder address(String address) { 
     return setIfNotNull("address", address); 
    } 

    public Query<Kind> build() { 
     return query; 
    } 

    private QueryBuilder setIfNotNull(String name, Object value) { 
     if (value != null) { 
      query = query.filter(name, value); 
     } 
     return this; 
    } 

} 

そして:

Query<Kind> query = new QueryBuilder() 
     .name(name) 
     .address(address) 
     .gender(gender) 
     .build(); 
+0

おかげ 調査の後、私はkotlinでその好きを持っていますエクステンション方法が正しい解決策です。 – Joel

関連する問題