经常看到网上很多朋友在探讨O/R Mapping的若干做法,近日在研习Patterns of Enterprise Application Architecture的时候也学到不少关于ORM的理论和实践(该书中有很大篇幅在讲O/R Mapping中的各个细节),不过我理想中的所谓ORM却是源自这个灵感:
class BookDataService: IBookDataService...
// 选出给定唯一标识的书目信息
BookInfo IBookDataService.Select(Guid bookUID)
{
return (BookInfo)ElegantORM.Execute(MethodBase.GetCurrentMethod(), bookUID);
}
// 选出与给定名称相似的书目信息
BookInfo[] IBookDataService.Select([Criterion.Like] string name)
{
return (BookInfo[])ElegantORM.Execute(MethodBase.GetCurrentMethod(), name);
}
// 插入新书目
void IBookDataService.Insert(BookInfo bookInfo)
{
ElegantORM.Execute(MethodBase.GetCurrentMethod(), bookInfo)
}
// 修改书目信息
void IBookDataService.Update(BookInfo bookInfo)
{
ElegantORM.Execute(MethodBase.GetCurrentMethod(), bookInfo)
}
// 删除书目
void IBookDataService.Delete(Guid bookUID)
{
ElegantORM.Execute(MethodBase.GetCurrentMethod(), bookUID)
}
后注:IBookDataService是数据访问组件的接口;BookDataService是该接口的一个基于ElegantORM的实现(当然还可以有基于内存的、XML的、ADO.NET的各种实现等等);BookInfo是一个数据传输对象(Data Transfer Object, DTO)类,它被业务层的Book实体类用作实体数据的存储,同时负责在层间整体的传输实体的各个数据项。
如果能够完成,我们现在这个项目的数据访问层组件写起来可就爽喽……还是那句话:只要你想,我就喜欢!呵呵