经常看到网上很多朋友在探讨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实体类用作实体数据的存储,同时负责在层间整体的传输实体的各个数据项。

如果能够完成,我们现在这个项目的数据访问层组件写起来可就爽喽……还是那句话:只要你想,我就喜欢!呵呵