【软件工程与实践】(12)KV设置的操作代码分析

2021SC@SDUSC

一、数据账户的kv设置

接口

1.DataAccountKVSetOperationBuilder

这是一个接口,我把代码分析都写在了注释里

public interface DataAccountKVSetOperationBuilder {
    
    

	/**
	 * 数据账户的KV写入操作;
	 * 
	 * @return
	 */
	DataAccountKVSetOperation getOperation();
	/**
	 * 写入键值;
	 * 
	 * @return
	 */
	/**
	 * @param key        键;
	 * @param value      值;
	 * @param expVersion 预期的当前版本;如果版本不匹配,则写入失败;
	 * @return
	 */
	DataAccountKVSetOperationBuilder set(String key, BytesValue value, long expVersion);
	/**
	 * 写入字节数组;
	 * 
	 * @param key        键;
	 * @param value      值;byte[]格式
	 * @param expVersion 预期的当前版本;如果版本不匹配,则写入失败;
	 * @return
	 */
	DataAccountKVSetOperationBuilder setBytes(String key, byte[] value, long expVersion);
	/**
	 * 写入字节数组;
	 *
	 * @param key        键;
	 * @param value      值;Bytes格式
	 * @param expVersion 预期的当前版本;如果版本不匹配,则写入失败;
	 * @return
	 */
	DataAccountKVSetOperationBuilder setBytes(String key, Bytes value, long expVersion);
	/**
	 * 写入键值;
	 *
	 * @param key        键;
	 * @param value      值;String格式
	 * @param expVersion 预期的当前版本;如果版本不匹配,则写入失败;
	 * @return
	 */
	DataAccountKVSetOperationBuilder setImage(String key, byte[] value, long expVersion);

//	/**
//	 * 写入文本键值;
//	 *
//	 * @param key
//	 *            键;
//	 * @param value
//	 *            值;String格式
//	 * @param expVersion
//	 *            预期的当前版本;如果版本不匹配,则写入失败;
//	 * @return
//	 */
//	@Deprecated
//	DataAccountKVSetOperationBuilder set(String key, String value, long expVersion);
	/**
	 * 写入文本键值;
	 *
	 * @param key        键;
	 * @param value      值;String格式
	 * @param expVersion 预期的当前版本;如果版本不匹配,则写入失败;
	 * @return
	 */
	DataAccountKVSetOperationBuilder setText(String key, String value, long expVersion);
	/**
	 * 写入JSON键值;
	 *
	 * @param key        键;
	 * @param value      值;String格式
	 * @param expVersion 预期的当前版本;如果版本不匹配,则写入失败;
	 * @return
	 */
	DataAccountKVSetOperationBuilder setJSON(String key, String value, long expVersion);
	/**
	 * 写入XML键值;
	 *
	 * @param key        键;
	 * @param value      值;String格式
	 * @param expVersion 预期的当前版本;如果版本不匹配,则写入失败;
	 * @return
	 */
	DataAccountKVSetOperationBuilder setXML(String key, String value, long expVersion);
	/**
	 * 写入64位整数;
	 *
	 * @param key        键;
	 * @param value      值;long格式
	 * @param expVersion 预期的当前版本;如果版本不匹配,则写入失败;
	 * @return
	 */
	DataAccountKVSetOperationBuilder setInt64(String key, long value, long expVersion);
	/**
	 * 写入时间戳;
	 *
	 * @param key        键;
	 * @param value      值;long格式
	 * @param expVersion 预期的当前版本;如果版本不匹配,则写入失败;
	 * @return
	 */
	DataAccountKVSetOperationBuilder setTimestamp(String key, long value, long expVersion);

}

2.DataAccountKVSetOperation

这个接口继承了operation

这也是一个关于账本初始化的接口,这个接口账本初始化的设置

代码定义了账本的种子

这个是共识方的参与列表,列表里面有一系列用户,这个方法同时可以给下面的方法提供相应的用户列表。

    @DataField(order=2, primitiveType=PrimitiveType.BYTES)
	Bytes getAccountAddress();
	
	@DataField(order=3, list=true, refContract=true)
	KVWriteEntry[] getWriteSet();
	
	
	@DataContract(code=DataCodes.TX_OP_DATA_ACC_SET_KV)
	public static interface KVWriteEntry{
    
    

		@DataField(order=1, primitiveType=PrimitiveType.TEXT)
		String getKey();

		@DataField(order=2, refContract = true)
		BytesValue getValue();

		@DataField(order=3, primitiveType=PrimitiveType.INT64)
		long getExpectedVersion();
	}

1.DataAccountKVSetOperationBuilderImpl

首先,这个类引用了上述的接口DataAccountKVSetOperationBuilder
我将代码分析放到了下面的注释里面

//这个类先实体化了一个类DataAccountKVSetOpTemplate
private DataAccountKVSetOpTemplate operation;
//这个是kv的账户配置,添加新的地址
	public DataAccountKVSetOperationBuilderImpl(Bytes accountAddress) {
    
    
		operation = new DataAccountKVSetOpTemplate(accountAddress);
	}
//这个方法返回一个operation实体类
	@Override
	public DataAccountKVSetOperation getOperation() {
    
    
		return operation;
	}
//这个方法可以用来设置operation的信息
//expVersion:版本号
//BytesValue:bytes的值
	@Override
	public DataAccountKVSetOperationBuilder set(String key, BytesValue value, long expVersion) {
    
    
		operation.set(key, value, expVersion);
		return this;
	}
//这个可以用来配置bytes的信息
//expVersion:版本号
//BytesValue:bytes的值
	@Override
	public DataAccountKVSetOperationBuilder setBytes(String key, byte[] value, long expVersion) {
    
    
		BytesValue bytesValue = TypedValue.fromBytes(value);
		operation.set(key, bytesValue, expVersion);
		return this;
	}
//这个方法可以用来设置图片
//expVersion:版本号
//BytesValue:bytes的值
	@Override
	public DataAccountKVSetOperationBuilder setImage(String key, byte[] value, long expVersion) {
    
    
		BytesValue bytesValue = TypedValue.fromImage(value);
		operation.set(key, bytesValue, expVersion);
		return this;
	}
//这个可以用来设置kv的内容
//expVersion:版本号
//BytesValue:bytes的值
	@Override
	public DataAccountKVSetOperationBuilder setText(String key, String value, long expVersion) {
    
    
		BytesValue bytesValue = TypedValue.fromText(value);
		operation.set(key, bytesValue, expVersion);
		return this;
	}
//这个同样是用来设置bytes的信息
//expVersion:版本号
//BytesValue:bytes的值
	@Override
	public DataAccountKVSetOperationBuilder setBytes(String key, Bytes value, long expVersion) {
    
    
		BytesValue bytesValue = TypedValue.fromBytes(value);
		operation.set(key, bytesValue, expVersion);
		return this;
	}
//这个可以用来设置Int64的内容
//expVersion:版本号
//BytesValue:bytes的值
	@Override
	public DataAccountKVSetOperationBuilder setInt64(String key, long value, long expVersion) {
    
    
		BytesValue bytesValue = TypedValue.fromInt64(value);
		operation.set(key, bytesValue, expVersion);
		return this;
	}
//这个可以用来设置jason文件
	@Override
	public DataAccountKVSetOperationBuilder setJSON(String key, String value, long expVersion) {
    
    
		BytesValue bytesValue = TypedValue.fromJSON(value);
		operation.set(key, bytesValue, expVersion);
		return this;
	}
//这个方法可以用来设置XML文件的内容
	@Override
	public DataAccountKVSetOperationBuilder setXML(String key, String value, long expVersion) {
    
    
		BytesValue bytesValue = TypedValue.fromXML(value);
		operation.set(key, bytesValue, expVersion);
		return this;
	}

	@Override
	public DataAccountKVSetOperationBuilder setTimestamp(String key, long value, long expVersion) {
    
    
		BytesValue bytesValue = TypedValue.fromTimestamp(value);
		operation.set(key, bytesValue, expVersion);
		return this;
	}

猜你喜欢

转载自blog.csdn.net/weixin_45932150/article/details/122163152