====== XItem ====== **//Inherited from//** NULL **//Inherited by//** [[class:domain:nitem|NItem]],[[class:domain:orderitem|OrderItem]] **//Friend class//** NULL **//Description//** {{ pics:class:XItem.png }} XT中所有的数据对象均从XItem继承,任何数据对象都有类型标识,身份ID,其中类型标识用于和其他对象区分,对外部访问而言,以字符串标识(通过静态函数ctypeString()访问,字符串长度应小于16),对于内部使用(运行时),则使用整数标识(在注册时动态生成,通过静态函数ctype()访问);整数身份ID(通过getId()访问),管理类通过身份ID构建对象的索引。 默认情况下,数据对象的整数标识按照注册顺序,从类型标识基数开始递增,类型标识基数与管理器的整数标识存在如下关系: ItemTypeBase = DomainType*DomainItemTypeSize 其中DomainType为管理器整数标识,DomainItemTypeSize为每个管理器能容纳的对象类型的最大数目(现设为10000)。 开发者也可以为数据对象指定固定的整数标识,该整数标识须在(ItemTypeBase,ItemTypeBase+DomainItemTypeSize)区间。 当一个数据对象发生修改时,该数据对象必须从对应的[[class:domain:xmanager|XManager]]检出(CheckOut),功能如果成功执行,那即表示修改有效,在这一过程中对象修改之前的状态和修改之后的状态均会以二进制形式保存到本地临时的数据操作记录(Operation Record)文件中,用户可以在后面操作中读取数据操作记录中的副本值回到修改之前的状态,同样的,根据这份记录,用户也可以从过去的某个状态再顺序重做操作。在某些情况下,功能执行失败,修改的数据对象并不会检入到数据操作记录中,这时候就可以通过内存中的副本回滚到启动功能之前的状态。数据操作记录文件以二进制形式保存在硬盘上,由于它保存了所有数据对象的包括增加、修改、删除在内的全部历史操作记录,所以即使发生断电或者死机这样的极端情况,XT平台依然能快速恢复到故障发生之前的状态。\\ 这样的机制也非常方便故障的重现,便于程序员快速的分析、定位问题并解决问题,从而能够显著的提高软件可维护性。 **//Members//** * int [[xitem#m_irecordid|m_iRecordId]] * int [[xitem#m_iloc|m_iLoc]] * ulong [[xitem#m_ulid|m_ulId]] * ulong [[xitem#m_itype|m_iType]] **//Public interface//** * [[xitem#xitem1|XItem]](ulong id = 0) * [[xitem#xitem2|XItem]](ulong id,ulong type) * ulong [[xitem#getid|getId]]() const * void [[xitem#setid|setId]](ulong id) * TypeID [[xitem#gettype|getType]]() const * void [[xitem#settype|setType]](TypeID tid) * void [[xitem#copyreference|copyReference]](const XItem * ref) * bool operator [[xitem#equal|==]] (const XItem &r) * TypeID [[xitem#getcatagory|getCatagory]]() const * TypeID [[xitem#getdomaintype|getDomainType]]() const * static bool [[xitem#isvalid|IsValid]](const XItem * t) ---- {{anchor:m_irecordid}} **int m_iRecordId** 在完成功能时,XT会将所有被修改的对象按顺序记录到二进制文件中,该变量表示在数据对象发生修改(包括创建或删除)时的操作记录序号,在提交修改之后将重置为NO_RECORD. {{anchor:m_iloc}} **int m_iLoc** 在某些特殊的场合下使用,比如保存对象在某数组中的位置信息等。 {{anchor:m_ulid}} **ulong m_ulId** 对象的身份标识ID,整型值,该标识一般在对象管理器中自动分配,对象管理器使用它构建索引;也可以通过它表示对对象的引用(如XUniqueObjectID) {{anchor:m_itype}} **ulong m_iType** 对象类型标识,整型值,程序启动时由对象管理器通过其字符串标识自动分配,是一个动态的值,在不同配置环境下可能不同。 ---- {{anchor:xitem1}} **XItem(ulong id = 0)** *function: 对象构造函数 *parameters: - [i]ulong id = 0: 对象身份ID,默认为0 *return value: 无 {{anchor:xitem2}} **XItem(ulong id,ulong type)** *function: 对象构造函数 *parameters: - [i]ulong id: 对象身份ID - [i]ulong type: 整型的对象类型标识 *return value: 无 {{anchor:getid}} **ulong getId() const** *function: 获取对象身份ID *parameters: NULL *return value: 对象身份ID {{anchor:setid}} **void setId(ulong id)** *function: 设置对象身份ID *parameters: - [i]ulong id: 对象身份ID *return value: 无 {{anchor:gettype}} **TypeID getType() const** *function: 获取整型的对象类型标识 *parameters: NULL *return value: 整型的对象类型标识 {{anchor:settype}} **void setType(TypeID tid)** *function: 设置整型的对象类型标识 *parameters: - [i]TypeID tid: 整型的对象类型标识 *return value: 无 {{anchor:copyreference}} **void copyReference(const XItem * ref)** *function: 从参考对象指针复制对象 *parameters: - [i]const XItem * ref: 被参考的对象 *return value: 无 {{anchor:equal}} **bool operator == (const XItem &r)** *function: 重载相等运算符,判断两个对象是否相等 *parameters: - [i]const XItem &r: 被比较的对象 *return value: 若对象相等返回true,否则返回false {{anchor:getcatagory}} **TypeID getCatagory() const** *function: 获取对象的分类标识 *parameters: NULL *return value: 对象的分类标识,整型值 {{anchor:getdomaintype}} **TypeID getDomainType() const** *function: 获取对象的域标识 *parameters: NULL *return value: 对象的域标识,整型值 {{anchor:isvalid}} **static bool IsValid(const XItem * t)** *function: 判断指针是否指向有效对象 *parameters: - [i]const XItem * t: 对象指针 *return value: 如所指对象有效返回true,否则返回false(如对象已被销毁)。