[摘要]基于Grove的.NET应用程序开发提示 1. 尽量避免新增映射实体类,主要表现在关系映射实体。当程序需要查询符合某种条件的记录时,往往需要通过关系映射实体进行查询,当该关系实体在其他调...
基于Grove的.NET应用程序开发提示
1. 尽量避免新增映射实体类,主要表现在关系映射实体。当程序需要查询符合某种条件的记录时,往往需要通过关系映射实体进行查询,当该关系实体在其他调用者使用时,有时又因为缺少某些字段而需要向该关系映射实体新增查询字段或重新建立实体,所以在关系实体建立的时候,应尽量考虑其他调用者的需求,这样可以有效的避免关系映射实体的重复或因关系实体的改变而导致的其他不安定因素。
2. 避免在数据操作层中出现同样的功能(方法),尽管这些功能可能不属于同一个管理类。当调用者需要新增或修改(包括删除)一个实体(非关系实体)时,应首先检查Façade层中是否已经有该功能的存在,这要求数据操作层中所有管理类的编写者明确的注释好每一个方法的功能描述,要排除歧义。
3. 在实体映射时,如果该实体映射某个主表,一般应明确该主表对应的子表映射项。如主表表名为Main,子表表名为Sub,对应的映射实体为Main.class和Sub.class,该Main实体应申请子表项如下(例):
ArrayList _childs=null;
public ArrayList Childs
{
get{
if(this. _childs==null)
{
//oo的初始代码
this._childs=new ArrayList();
this. _childs=oo.RetrieveChildObjects(this.id,this._ childs,typeof(Sub));
//oo的释放代码
}
return this. _childs;
}
set{this._childs=value;}
}
4. 实体操作的定义,主子表关系应有事务支持,如下:
public void AddMain(Main m)
{
//oo的初始代码
oo.BeginTransaction();
try{
oo.InsertObject(m);
oo.InsertObjects(m.Childs);
oo.Commit();
}
catch(Exception e)
{
oo.Rollback();
throw e;
}
oo.Dispose();//oo的释放代码
}
5. 层间数据的传入传出,当某个功能需要实现通过某个实体的KeyField返回该实体时,传入的应是该实体的KeyField;当某个实体的新增或更新时,应传入该实体的实例。
6. 逻辑层Rule的定义
……