package com.brilliance.isc.transfer;


import org.mapstruct.MappingTarget;

/**
 * 交易的Vo、Bo之间的转换允许
 * 需支持以下场景：1.Vo拷贝至Bo；2.Bo拷贝转换至Vo
 * B 表示业务BO
 * V 表示接口的Vo
 * Vo往往是BO的子集
 */
public interface IStructMapper<B,V> {
    /**
     * Vo转为Bo
     * @param vo
     * @return 返回业务Bo
     */
    B voTransferToBo(V vo);

    /**
     * Vo追加更新至Bo
     * @param vo
     * @param bo
     */
    void voUpdateToBo(V vo, @MappingTarget B bo);

    /**
     * Bo转为Vo
     * @param bo
     * @return 返回Vo
     */
    V boTransferToVo(B bo);

    /**
     * bo追加更新至Bo
     * @param bo
     * @param vo
     */
    void boUpdateToVo(B bo, @MappingTarget V vo);
}
