前言
- 这一篇是本系列的最后一篇,虽然示例讲到这里就停止呢,但对于这些技术的学习远不能停止。虽然本示例讲的比较基础,但是正如我第一篇说到的,这个系列的目的不是说一些高端的架构设计,而是作为一个入门级,对学习EntityFramework6构建一个简单的示例以及对其进行设计,管理,编码的过程。
- 应部分园友要求,博客换了一个清爽的模板。之前的模板也是为了学习一下,所以按照其他模板的样式,把自己的博客园模板修该了一下。虽然这不是写博客的主要目的,但还是从中学习到了很多,比如小插件的应用、运行js和css控制样式等。所以“动手”才是我们GET新技能最有效的方式。
- 解决方案示例只剩下服务层没有说明了,在这篇中会对其进行说明。接下来就是介绍一些相应的学习资源,帮助自己和大家共同进步。
Factory工厂的构建
- 现在在设计软件的时候,我们很少利用new关键字来创建对象,原因就是现在的系统的层次结构原来越复杂。为了有效的减少层级间的耦合度,我们会使用一些其他的设计方法。比如之前说的依赖注入,这样的IOC容器有很多。不过服务层我还是利用设计模式中的工厂模式来减少层级间的垂直依赖关系。
- 首先我们先建立一个缓存类, 因为对象的创建需要消耗资源和时间。利用缓存就可以对同一对象不需要反复创建,而是直接去加载缓存,这样可以提升系统的效率。参考代码如下:
public class DataCache { // 获取当前应用程序指定CacheKey的Cache值 public static object GetCache(string CacheKey) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; return objCache[CacheKey]; } // 设置当前应用程序指定CacheKey的Cache值 public static void SetCache(string CacheKey, object objObject) { System.Web.Caching.Cache objCache = HttpRuntime.Cache; objCache.Insert(CacheKey, objObject); } }
- 接下来,我们利用Reflection来对Concrete的对象进行动态创建。这样我们可以在需要的时候才对对象进行创建,有效的提升了系统的性能。参考代码如下:
//不使用缓存 private static object CreateObjectNoCache(string AssemblyPath, string classNamespace) { try { object objType = Assembly.Load(AssemblyPath).CreateInstance(classNamespace); return objType; } catch//(System.Exception ex) { //string str=ex.Message;// 记录错误日志 return null; } } //使用缓存 private static object CreateObject(string AssemblyPath, string classNamespace) { object objType = DataCache.GetCache(classNamespace); if (objType == null) { try { objType = Assembly.Load(AssemblyPath).CreateInstance(classNamespace); DataCache.SetCache(classNamespace, objType);// 写入缓存 } catch//(System.Exception ex) { //string str=ex.Message;// 记录错误日志 } } return objType; }
- 最后,我们创建数据层接口对象就变得非常简单呢,只需要提供程序集路径和命名空间的名称,例如用户接口对象的创建参考代码如下:
// 创建S_UserRepository数据层接口。 public static IS_UserRepository CreateS_User() { string ClassNamespace = AssemblyPath + ".S_UserRepository"; object objType = CreateObject(AssemblyPath, ClassNamespace); return (IS_UserRepository)objType; }
- 在Service层新建web服务文件SysUserService.asmx后,我们就可以在其中对用户接口层中的方法进行调用呢,例如读取用户列表的第一个用户的名称。参考代码如下:
private readonly IS_UserRepository bllS_User = DataAccess.CreateS_User(); [WebMethod] public string HelloWorld() { int total; string strName = bllS_User.GetInfo("", 10, 1, out total).FirstOrDefault().UserName; return "Hello World: " + strName; }
- 到此,服务层的创建工作已经完成。虽然没有对代码进行编写了,不过可以按照上面的模式对服务层构建完整的解决方案。源码已经放入网盘,点击下载。
备注
- 如果你对EntityFramework还没有了解,可以观看微软专家的几个视频资源进行了解。
- 如果了解了EntityFramework可以直接查看以下博客,这是Entity Framework 6 Code First系列博客,新的系列采用Entity Framework 6和MVC5构建,写得非常好。主要包括一下内容:
- 创建Entity Framework 数据模型
- 实现基本的CRUD功能
- 排序、过滤和分页
- 连接弹性和命令拦截
- Code First 代码迁移和部署
- 创建复杂数据模型
- 读取关联数据
- 更新关联数据
- 异步和存储过程
- 并发处理
……..
博客链接地址:点此跳转
- 如果你已经对EntityFramework非常了解了,并且需要对其构建企业级应用架构和解决方案,可以查看以下的开源架构。CodePlex上的开源框架EFMVC,主要包含以下类容:
Technologies
- Windows Azure SDK
- ASP.NET MVC 4 RTM
- ASP.NET Web API
- Entity Framework Code First 5
- Autofac
- AutoMapper
- NUnit
- Moq
Patterns & Practices
- Domain Driven Design (DDD)
- Test-Driven Development (TDD)
- Repository Pattern & Generic Repository
- Unit of Work Pattern
- Dependency Injection
点此查看链接地址
时间: 2024-10-08 17:05:48