All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.kuangkie.carbon.fg.FunctionGroup Maven / Gradle / Ivy

The newest version!
package com.kuangkie.carbon.fg;

import com.kuangkie.carbon.fg.ops.FGRelationOps;
import com.kuangkie.carbon.fg.ops.FGOpsComplexus;
import com.kuangkie.carbon.fg.ops.FGRecordOps;
import com.kuangkie.carbon.fg.ops.RelationOps;

/**
 * 
 * @version: V1.0
 * 
 * @author: wangnq
 * 
 * @className: FunctionGroup
 * 
 * @packageName: cho.carbon.fuse.fg
 * 
 * @description: 一个标识业务接口的接口
 * 
 * @data: 2020年8月12日
 * 
 *
 */
public interface FunctionGroup {
	
	/**
	 * 
	 * @methodsName: improveOnlyCorrelativeRelation
	 *
	 * @description: 业务处理过程中,可以给当前记录增加或删除关系,一条关系会涉及到两条记录,当对向模型记录在关系更新时需要走融合过程。
	 *               当当前记录模型有关系关联上述模型时,需要返回false。默认返回true。
	 *               建议通过更好的设计避免此方法返回false的情况。因为这不仅会影响效率也可能会引起混乱。
	 *
	 * @return
	 *
	 */
	public default boolean improveOnlyCorrelativeRelation() {
		return true;
	}

	/**
	 * 
	 * @methodsName: improveEveryTime
	 *
	 * @description: 返回true时,意味着模型的记录无论是否有属性或关系被提交,都会执行此记录的融合过程。返回false时,只有记录有属性更新或有效的关系操作时才会执行融合过程。
	 *               返回true时会执行更多的融合过程,会影响系统性能。
	 *
	 * @return
	 *
	 */
	public default boolean improveEveryTime() {
		return false;
	}

	/**
	 * 
	* @methodsName: needImprove
	*
	* @description: 根据参数,帮助融合控制器判断是否需要执行融合过程。通常不需要重写这个方法。请慎重构思后在重写此方法。
	* 此方法重写后可能会导致improveOnlyCorrelativeRelation和improveEveryTime方法失效。因为融合控制器不会直接调用上述两方法,而是在本方法中调用。
	* 
	*
	* @param recordCode
	* @param opsComplexus
	* @return
	*
	 */
	public default boolean needImprove(String recordCode, FGOpsComplexus opsComplexus) {
		boolean result = improveEveryTime();
		if (result == true) {
			return result;
		}
		if (opsComplexus == null) {
			return false;
		} else {
			FGRecordOps rootRecordOps = opsComplexus.getRecordOps(recordCode);
			if (rootRecordOps != null && rootRecordOps.isUseful()) {
				return true;
			}
			FGRelationOps fgRelationOps = opsComplexus.getRecordRelationOps(recordCode);
			if (fgRelationOps == null) {
				return false;
			} else {
				RelationOps recordRelationOps = fgRelationOps.getBaseRelationOps();
				if (recordRelationOps != null && recordRelationOps.isUsefulOps()) {
					return true;
				}
				if (improveOnlyCorrelativeRelation()) {
					recordRelationOps = fgRelationOps.getCorrelateRelationOps();
					if (recordRelationOps != null && recordRelationOps.isUsefulOps()) {
						return true;
					}
				}
			}

			return result;
		}

	}

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy