快速业务通道

微型项目实践(5):Business层代码分析——实体基类

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
  if (database == null)   4:     throw new ArgumentNullException("database");   5:    6:   var validateResult = this.Validate(database);   7:   if (!validateResult.IsValidated)   8:     throw new ValidateFailException(validateResult);   9:   10:   SaveAction(database);  11: }

Validate、Save和Delete所带的参数都是IDatabase接口,这个接口定义了数据库所要实现的全部操作 ,应该说是一个非常粗颗粒度的接口(虽然现在该接口只有一个方法)。使用粗颗粒度的接口的好处是: 实体类内部在处理与自身相关的数据时,可以访问到整个数据库,使用起来方便。从逻辑上讲,这三个方 法使用数据库作为参数,表示在该数据上下文环境中,执行Validate、Save和Delete操作,意思也是很清 晰的。后面会出现的对于数据库的操作,都将以这种粗颗粒度的接口作为参数。不过使用粗颗粒度的接口 也要注意,实现机制不能过于臃肿,不然构造太多的实例会影响系统性能,我们使用Lazy Load解决这个 问题,在分析数据访问的实现时,我们还会回到这个问题上来。

EntityExtension这个类提供了一个非常常用的扩展方法:根据ID取得实体:

  1: /// <summary>
  2: /// 根据ID取得实体
  3: /// </summary>
  4: /// <typeparam name="T">实体类型</typeparam>
  5: /// <param name="query">实体查询</param>
  6: /// <param name="id">ID</param>
  7: /// <returns>对应的实体,不存在则返回空</returns>
  8: public static T GetByID<T>(this IQueryable<T> query, int id)
  9:   where T : Entity<T>
 10: {
 11:   if (query == null)
 12:     throw new ArgumentNullException("query");
 13: 
 14:   return query.SingleOrDefault(entity => entity.ID == id);
 15: }

有了这个方法,结合数据访问接口,就可以通过这样的方式取得一个Blog: database.GetDataAccess<Blog>().GetByID(1);

该方式,以后还会进一步简化为:database.Blogs.GetByID(1);

今天我们分析了实体基类的代码和设计方式,下一篇中我们将着重研究数据访问两个接口的设计与实 现。

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号