加入NBearV4-Dev开发组已经好几个礼拜了。9号晚上,整个开发组开了一次会,听Teddy讲了下NBearV4的主体架构以及近期的工作安排,基于自己的兴趣爱好,我加入了Entity的开发小组。
对于Entity的实现,我自己到真的有一些想法和设计思路。整理了一下自己的思路,形成了一份文档发到了NBearV4-Dev的Google Group上,说实话,再发上去之前,心中很是忐忐不安的,总是怕自己的设计思路被人笑话(呵呵,其实认真想起来自己也不觉得这有什么,但第一次,总是...)。
----------------------------------------------------------哦~~我是一条分割线------------------------------------------------
对于实体层的设计,主要有3种方式:
1.定义一些Attribute贴在实体类以及实体类成员上,以表示实体类的数据库属性。
2.实现一个实体抽象基类,在该类中封装一些方法,以实现透明化实体与数据库之间的映射。
3.定义一组外部配置文件,通过它们来表示实体与数据库之间的映射。
对于NBearEntity,可以全部实现以上3种方式。使用者可以使用其中的一部分,也可以完全使用NBearEntity的实体解决方案。
为了支持以上3种方式,NBearEntity需要实现的功能有:
表示实体类的数据库属性的Attribute的定义。
获取、分析、缓存实体类的Attribute的工具类。
实现一个实体抽象基类---AbstractEntity。该类包含以下成员:
实例属性
public
说明:获取实体状态。该状态有4种
临时状态 :实体在没有持久化之前的状态。
“脏”状态 :实体已经被持久化,并在应用程序中被修改。
持久化状态 :实体已经被持久化,并在应用程序中未被修改。
游离状态 :逻辑上删除实体(数据库中的条目未被删除)
关于这4种状态的讨论,可以参见风云的blog:
http://www.cnblogs.com/netcasewqs/archive/2006/12/15/593553.html
protected IDataProvider _Provider{get;set;}
说明:获取和设置实体的数据访问助手。
实例方法
public virtual void Load(IDataReader pReader)
说明:该方法将数据装载进实体类内。
public virtual int Save()
说明:该方法将已经被修改过的实体写回数据库。该方法依赖于实体所映射的数据库的DataProvider。
protected void _DirtyWrite()
说明:当继承自AbstractEntity的实体已经装载了数据并被修改后,调用该方法更新实体的状态。
必要性待确认的方法
public virtual int SaveDirectly()
说明:该方法将实体直接写回数据库,而不关心实体是否被修改过。该方法依赖于实体所映射的数据库的DataProvider。
public virtual void LoadByKey(Key[] pKeys)
说明:通过实体的键值装载数据。该方法通过键值从数据库中读取数据并装载进实体中。该方法依赖于实体所映射的数据库的DataProvider。
类方法
public static void LoadStruct(XmlDocument pXml)
说明:通过Xml文件,一次性的将所有的应用程序相关的实体的数据库属性都装载并缓存起来。
构造函数
public AbstractEntity(Type pChild)
说明:构造函数的参数pChild表示继承自AbstractEntity的实体类的类型。通过该参数,抽象基类将自动获取实体的数据库属性并缓存这些属性。
public AbstractEntity(Type pChild , IDataProvider pProvider)
说明:该重载的构造函数不仅包含指示实体类类型的参数,还包含一个参数pProvider用于设置实体的数据访问助手。
PS:这个设计方案最终还没选定为NBearEntity的实体设计方案,Teddy和我在实体设计这快还有些争议,但,我相信,我会说服Teddy的 ^_^
浙公网安备 33010602011771号