数据实体的表示
Websharp在数据的表现上,能够采用两种方式。
第一种方式,充分利用了.Net Framework类库中DataSet的功能,设计了一个EntityData类。这个类继承了DataSet,并增加了一些属性和方法。同数据库的映射关系,采用XML配置文件的方式。XML配置文件可以通过我们提供的工具来生成。
在实际的应用中,要获取一个Product实体对象,可以通过如下方式取得:
EntityData Product=EntityProtypeManager. GetEmptyEntity(“Product”);
然后,可以通过如下方式来访问这个对象的属性:
string ProductID=Customer[“ProductID”]
可以看到,这种方式同纯粹的面向对象的方式有点不同。在这种方式下,数据的表现形式只有一个,那就是EntityData。其好处是明显的,不用为每个实体都单独编写一个类,能够大大减少代码的编写量。其缺点也很明显,那就是不能利用编译器类型检测的功能,如果在调用对象的属性的时候,写错了属性的名称,就可能出错,但是,这个问题可以通过工具来解决。这种方式,比较符合原来使用ADO编程人员的习惯。
第二种方式,我们可以编写一个Product类,然后,按照标准的OO的方法来使用这个类。只不过,在编写Product类的时候,必须实现PersistenceCapable接口,并且,同时可以使用到EntityData类的强大功能。
PersistenceCapable类的定义见 附1:Websharp主要接口定义——PersistenceCapable
一个按照这个标准实现的Product类的示例如下:
public class Product : PersistenceCapable
{
private EntityData product;
public Product() : this(true)
{}
public Product(bool AutoInit)
{
product=EntityPrototypeManager.GetEmptyEntity("Product");
if(AutoInit)
product.NewRecord();
}
public string ProductID
{
get{return product.GetString("ProductID");}
set{product["ProductID"]=value;}
}
public string Name
{
get{return product.GetString("Name");}
set{product["Name"]=value;}
}
public string UnitName
{
get{return product.GetString("UnitName");}
set{product["UnitName"]=value;}
}
public string Description
{
get{return product.GetString("Description");}
set{product["Description"]=value;}
}
public decimal Price
{
get{return product.GetDecimal("Price");}
set{product["Price"]=value;}
}
public decimal CurrentCount
{
get{return product.GetDecimal("CurrentCount");}
set{product["CurrentCount"]=value;}
}
public int ObjectCount
{
get
{
return product.EntityCount;
}
}
public EntityData EntityData
{
get
{
return product;
}
set
{
product=value;
}
}
public bool Next()
{
return product.Next();
}
public void First()
{
product.First();
}
public void AddNew()
{
product.NewRecord();
}
}
可以看出,采用这种方式,Product类既可以代表一个单个的Product对象,也可以包含一个Product对象集合,并且可以通过Next和First方法来遍历。