diff --git a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoNamedQueryChain.java b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoNamedQueryChain.java index a8a0b26..a34e8e6 100644 --- a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoNamedQueryChain.java +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/MongoNamedQueryChain.java @@ -5,20 +5,23 @@ import com.flyfish.framework.query.Queries; import com.flyfish.framework.query.QueryChain; import com.flyfish.framework.query.QueryCondition; import lombok.RequiredArgsConstructor; -import org.springframework.data.mongodb.core.query.Criteria; import java.util.Collection; import java.util.List; -import java.util.function.Consumer; import java.util.function.Supplier; /** * mongodb实现的基于名称的查询链 + * 这里需要一个机制,能够将父类上下文带入,并且能够知晓实际查询对象的连接方式 + * 这就需要用到观察者模式,以便延迟执行。将动作作为事件发布到对象里,在具体的执行时机再进行fire。 + * 于是乎,我们便可以优雅而且低耦合的实现链式了。 * * @author wangyu */ public class MongoNamedQueryChain extends MongoQueryDefinition implements NamedQueryChain { + private final QueryChainListener listener = null; + /** * 以且连接下一个字段 * @@ -27,6 +30,7 @@ public class MongoNamedQueryChain extends MongoQueryDefinition implements NamedQ */ @Override public QueryCondition and(String column) { + listener.waitFor(criteria -> criteria.andOperator(criteria)); return new NamedQueryCondition(column); } @@ -127,7 +131,8 @@ public class MongoNamedQueryChain extends MongoQueryDefinition implements NamedQ */ @Override public NamedQueryChain eq(Object value) { - MongoNamedQueryChain.this.criteria.is(value); + criteria.is(value); + listener.fire(); return MongoNamedQueryChain.this; } diff --git a/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/QueryChainListener.java b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/QueryChainListener.java new file mode 100644 index 0000000..ac29119 --- /dev/null +++ b/flyfish-data/flyfish-data-mongodb/src/main/java/com/flyfish/framework/mongodb/query/impl/QueryChainListener.java @@ -0,0 +1,28 @@ +package com.flyfish.framework.mongodb.query.impl; + +import org.springframework.data.mongodb.core.query.Criteria; + +import java.util.function.Consumer; +import java.util.function.Function; + +/** + * 监听器,观察者 + * + * @author wangyu + */ +public interface QueryChainListener { + + /** + * 等待下一步消费 + * + * @return 本身 + */ + QueryChainListener waitFor(Consumer consumer); + + /** + * 触发动作 + * + * @return 本身 + */ + QueryChainListener fire(); +}