前言

  • 这一篇是本系列的最后一篇,虽然示例讲到这里就停止呢,但对于这些技术的学习远不能停止。虽然本示例讲的比较基础,但是正如我第一篇说到的,这个系列的目的不是说一些高端的架构设计,而是作为一个入门级,对学习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("", , , out total).FirstOrDefault().UserName;
return "Hello World: " + strName;
}
  • 到此,服务层的创建工作已经完成。虽然没有对代码进行编写了,不过可以按照上面的模式对服务层构建完整的解决方案。源码已经放入网盘,点击下载

备注

  • 如果你对EntityFramework还没有了解,可以观看微软专家的几个视频资源进行了解。
  • 如果了解了EntityFramework可以直接查看以下博客,这是Entity Framework 6 Code First系列博客,新的系列采用Entity Framework 6和MVC5构建,写得非常好。主要包括一下内容:
  1. 创建Entity Framework 数据模型
  2. 实现基本的CRUD功能
  3. 排序、过滤和分页
  4. 连接弹性和命令拦截
  5. Code First 代码迁移和部署
  6. 创建复杂数据模型
  7. 读取关联数据
  8. 更新关联数据
  9. 异步和存储过程
  10. 并发处理

  ……..

  博客链接地址:点此跳转

  另外还有EntityFramework团队的博客地址

  • 如果你已经对EntityFramework非常了解了,并且需要对其构建企业级应用架构和解决方案,可以查看以下的开源架构。CodePlex上的开源框架EFMVC,主要包含以下类容:

  Technologies

  1. Windows Azure SDK
  2. ASP.NET MVC 4 RTM
  3. ASP.NET Web API
  4. Entity Framework Code First 5
  5. Autofac
  6. AutoMapper
  7. NUnit
  8. Moq

  Patterns & Practices

  1. Domain Driven Design (DDD)
  2. Test-Driven Development (TDD)
  3. Repository Pattern & Generic Repository
  4. Unit of Work Pattern
  5. Dependency Injection

  点此查看链接地址

EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(完)的更多相关文章

  1. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(一)

    前言 本系列源自对EF6 CodeFirst的探索,但后来发现在自己项目中构建的时候遇到了一些问题以及一些解决方法,因此想作为一个系列写下来. 本系列并不是教你怎么做架构设计,但可以参照一下里面的方法 ...

  2. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(六)

    前言 在接下来的篇幅里将对系统的模块功能进行编写.主要以代码实现为主.这一篇我们需要完成系统模块“角色管理”的相关功能.完成后可以对系统框架结构有进一步了解. Abstract层 之前说过,Abstr ...

  3. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(三)

    前言 在上一篇中,我们依靠着EasyUI强大的前端布局特性把前端登录界面和主界面给搭建完成了.这一篇我们就要尝试着把整个解决方案部署到云端呢,也就是Visual Studio Online(TFVC) ...

  4. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(二)

    前言 写完第一篇后,我一直在想接下来应该从哪一方面开始讲.后来我觉得不用那么死板的把每一个课程和大纲都列出来吧,毕竟我又不是教书的,呵呵...我觉得就像做实验一样,我们一部分一部分的完成,最后总个结果 ...

  5. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(八)

    前言 本篇幅将对系统的菜单管理模块进行说明,系统的菜单采用树形结构,这样可以更好地方便层级设计和查看.本示例将说明如何通过EntityFramework读取递归的菜单树形结构,以及结合EasyUI的t ...

  6. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(七)

    前言 上一篇文章我们完成了系统角色管理的基本功能实现,也对系统层次结构进行了了解.这一篇我们将继续对系统的用户管理模块进行代码编写.代码没有做封装,所以大部分的逻辑代码都是相通的,只是在一些前端的细节 ...

  7. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(四)

    前言 这一篇,我们终于到了讲解Entity Framework CodeFirst 的时刻了,首先创建实体对象模型,然后会通过配置Fluent API的方式来对实体对象模型进行完整的数据库映射操作. ...

  8. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(九)

    前言 这一篇我们将完成系统的权限设置功能以及不同角色用户登录系统后动态加载菜单.注意:此示例权限只针对菜单级,如果园友需要更复杂的系统权限设置,可以拓展到按钮级或属性级. 用户的登录采用Form认证来 ...

  9. EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(五)

    前言 在编写代码的时候,我遇到了很多关于EntityFramework6的疑问,所以现在就提前把这些问题列出来做一下解答,以便在以后的代码编写过程中减少不必要的Bug. EntityFramework ...

随机推荐

  1. Computed read-only property vs function in Swift

    In the Introduction to Swift WWDC session, a read-only property description is demonstrated: class V ...

  2. 编码转换的处理 DreamWeaver SC6 打开会出现javacsript出现问题的处理

      编码转换的处理: 打开DW后,修改里面有个"页面属性": 点击页面属性,会弹出一个窗口,点击"标题/编码",在"编码"里面选择你要转换的 ...

  3. 关于editor网页编辑器ueditor.config.js 配置图片上传

    最近公司项目在做一个门户网站,其中新闻和简介等部分使用到了ueditor编辑器,但是上级明确指示需要图片上传这个功能,这时却发现图片上传功能不能正常使用,上传时一直报错,网上收了好几个处理办法,都说的 ...

  4. java中类的初始化和对象的初始化

    静态的属于全局静态区,这个部分独立存在,不管是成员还是块,都是静态的,大家地位相等,先到先得. 然后是成员初始化,这个部分在类的构造函数前初始化,因为编译器(或者设计者)可能认为构造函数调用了这个成员 ...

  5. php数据类型及转换

  6. gbd基本使用一

    http://biancheng.dnbcw.info/linux/391846.html

  7. Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程

    Reactor事件驱动的两种设计实现:面向对象 VS 函数式编程 这里的函数式编程的设计以muduo为例进行对比说明: Reactor实现架构对比 面向对象的设计类图如下: 函数式编程以muduo为例 ...

  8. ASP.NET MVC 静态资源打包和压缩问题小记

    ASP.NET MVC 中有个 BundleConfig 用于静态资源的打包和压缩,我在使用的过程中遇到一些问题,现在做下总结,并给出具体的解决方案. 问题一:打包压缩后的 JavaScript 和 ...

  9. 关于 jquery和js获取宽度时只能取整数,取不到小数点

    最近在改版自已的一个网站的时候,遇到了一个问题. 用jquery的width()函数获取元素宽度的时候,返回得到的是整数,而不是小数. 如下图,谷歌上显示的宽度为1078.89px 而我用控制台输出了 ...

  10. python 02

    函数的参数 默认参数: 函数的基本形参, 可以有默认参数, 什么是基本形参呢, 就是普通变量, 如字符串, 数字等. 并且带有默认参数的形参, 要放在后边. 传参时, 不必将所有的参数都传递, 可以只 ...