2017-02-13 17 views
1

У меня есть ресурс с несколькими параметрами запроса с нулевым значением. Я хочу вернуть соответствующие объекты из базы данных (GAE DataStore) У меня есть более короткий или более красивый способ сделать это (я ищу что-то вроде метода «set if not null»)?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

благодаря После исследования у меня любят, что в Котлин метод расширения является правильным решением. – Joel