持续研究了系统框架和网络通讯的技术后,最近在思考一种新的数据业务对象的实现问题。在公司的产品中使用的是一个比较强壮的业务类:BusinessItem。改类系统的功能比较强大,但有点不好:就是和DataSet对象绑定的比较紧,只能是否DataSet作为内部的数据源。
现有BusinessItem的主要功能有以下几个方面:
/// <summary>
/// BE实体运行时状态属性接口。
/// </summary>
public interface IBERuntime
{
/// <summary>
/// 判断BE是否运行在服务端。
/// </summary>
bool IsRunAtServer { get; }
}
public interface IBusinessItem : IBERuntime
{
/// <summary>
/// 检查数据一致性。
/// </summary>
void CheckCoherence();
/// <summary>
/// 数据完整性校验过程,其具体实现中一旦检查出任何一处数据完整性错误,应立刻抛出数据完整性
/// 例外DataIntegrityException(IntegrityException的子类)。
/// 数据完整性主要是指该业务数据项对象是否获得了所有必要的属性数据,其状态是否完整,这同这
/// 些属性值是否合理无关。
/// </summary>
void CheckDataIntegrity();
/// <summary>
/// 结构完整性校验过程,其子类具体实现中一旦检查出任何一处结构完整性错误,应立刻抛出结构完
/// 整性例外StructureIntegrityException(IntegrityException的子类)。
/// 结构完整性主要是指该业务数据项对象所表达的业务信息结构是否完整。
/// 例如,一个Bom对象必然包含由一个或多个Bom子件记录所组成的集合、一个标准Bom对象还必须包
/// 含其版本信息等。
/// </summary>
void CheckStructureIntegrity();
/// <summary>
/// 判断BE中是否存在指定的动态属性
/// </summary>
/// <param name="key">动态属性Key</param>
/// <returns></returns>
bool ContainDynamicProperty(object key);
/// <summary>
/// 获取运行环境中的CalledContext。
/// </summary>
CalledContext Context { get; set; }
/// <summary>
/// 通过特定的键值获得相应的动态属性值。
/// 其中动态属性是一种为业务数据项对象提供了一种用以增强其灵活性的机制,以便在未来加以应用,
/// 例如类的参数化、对象的客户可利用这一机制简化处理过程等。
/// </summary>
object GetDynamicProperty(object key);
/// <summary>
/// 空记录的判别。
/// </summary>
/// <returns></returns>
bool IsBlank();
/// <summary>
/// 检测特定的动态属性是否存在。
/// 其中动态属性是一种为业务数据项对象提供了一种用以增强其灵活性的机制,以便在未来加以应用,
/// 例如类的参数化、对象的客户可利用这一机制简化处理过程等。
/// </summary>
bool IsDynamicPropertyExist(object key);
/// <summary>
/// 获取或设置该业务数据项对象名。当该类对象被构造时,该属性将被设置。
/// </summary>
object Name { get; set; }
/// <summary>
/// 当前BusinessItem的ParentBusinessItem
/// </summary>
IBusinessItem Owner { get; }
/// <summary>
/// 设置动态属性的键值和属性值。如果想移除某一个动态属性,则通过以null作为属性值参数方式调
/// 用本函数即可。
/// 其中动态属性是一种为业务数据项对象提供了一种用以增强其灵活性的机制,以便在未来加以应用,
/// 例如类的参数化、对象的客户可利用这一机制简化处理过程等。
/// </summary>
void SetDynamicProperty(object key, object val);
}
其中的N层撤销机制是一个非常重磅的功能,此功能提供的是否使用的开关选项。因为其一:这个功能在所有的应用系统中不是必须的;其二:这个功能的使用会在系统运行效率和内存资源的消耗上是比较大的。 若像MS Word一样支持无限次撤销和重做的话,估计计算会因内存暴涨而宕机的。