EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(完)

前言

  • 这一篇是本系列的最后一篇,虽然示例讲到这里就停止呢,但对于这些技术的学习远不能停止。虽然本示例讲的比较基础,但是正如我第一篇说到的,这个系列的目的不是说一些高端的架构设计,而是作为一个入门级,对学习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构建,写得非常好。主要包括一下内容:
  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

  点此查看链接地址

时间: 2024-10-08 17:05:48

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

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

前言 本系列源自对EF6 CodeFirst的探索,但后来发现在自己项目中构建的时候遇到了一些问题以及一些解决方法,因此想作为一个系列写下来. 本系列并不是教你怎么做架构设计,但可以参照一下里面的方法,EF系列大都采用DDD的构建方式,这也是目前最流行的.如果你想对DDD有所了解,可以在园子当中寻找那些DDD方面的文章或者是在CodePlex上下载相关的DDD设计模型源码进行研究. 如果你是一个新人或者是没有用过EF6 CodeFirst的人,那么本系列将带你一步一步构建自己的解决方案平台.如果

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

前言 在上一篇中,我们依靠着EasyUI强大的前端布局特性把前端登录界面和主界面给搭建完成了.这一篇我们就要尝试着把整个解决方案部署到云端呢,也就是Visual Studio Online(TFVC)中. 在我们进行团队项目开发的过程中,或多或少的都会接触到一些源代码管理工具,比如vss.svn.tfs.git,这些工具都有着自己的特点.但最终目的都是方便团队的协作开发,提高工作效率.Visual studio从2013版本开始就为我们提供了云端管理源代码的能力.Visual Studio On

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

前言 今天早上,看到第一篇上首页呢,多谢支持! 写完第一篇后,我一直在想接下来应该从哪一方面开始讲.后来我觉得不用那么死板的把每一个课程和大纲都列出来吧,毕竟我又不是教书的,呵呵...我觉得就像做实验一样,我们一部分一部分的完成,最后总个结果应该就出来呢.那么这一篇就来把前端的样子弄出来,至少得知道长成什么样吧.接下来就应该开始捯饬了... 下载前端框架EasyUI 到EasyUI的官网下载压缩包.一个是基于GPL的开源版,一个是商业版.我们自己做研究就下个开源版呢.目前是1.4.3的版本,解压

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

前言 在接下来的篇幅里将对系统的模块功能进行编写.主要以代码实现为主.这一篇我们需要完成系统模块“角色管理”的相关功能.完成后可以对系统框架结构有进一步了解. Abstract层 之前说过,Abstract层是对业务接口的定义,所以我们新建接口文件IS_UserRepository,定义增删改查业务的接口.这一层需要添加对Entities层的引用.代码如下: using Entities; using System.Collections.Generic; namespace Abstract

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

前言 这一篇,我们终于到了讲解Entity Framework CodeFirst 的时刻了,首先创建实体对象模型,然后会通过配置Fluent API的方式来对实体对象模型进行完整的数据库映射操作. 此篇幅中会涉及到一些Entity Frame的相关概念,会给出初步的解释.如果需要详细了解,可以查阅相关的帮助文档. EF实体对象模型的创建 EF的实体对象模型大都采用POCO类的方式创建.POCO的全称为Plain_Old_CLR_Object(简单传统CLR对象),是指那些没有从任何类继承,也没

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

前言 上一篇文章我们完成了系统角色管理的基本功能实现,也对系统层次结构进行了了解.这一篇我们将继续对系统的用户管理模块进行代码编写.代码没有做封装,所以大部分的逻辑代码都是相通的,只是在一些前端的细节上处理有些不同.源码将在文章的末尾给出,有兴趣的园友可以对代码做一些封装或重构,毕竟这可以减少很多的代码量. Abstract层 在这一层添加对用户管理操作的业务接口IS_UserRepository,里面定义增删改查的业务接口.代码如下: using Entities; using System.

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

前言 本篇幅将对系统的菜单管理模块进行说明,系统的菜单采用树形结构,这样可以更好地方便层级设计和查看.本示例将说明如何通过EntityFramework读取递归的菜单树形结构,以及结合EasyUI的treegrid在Asp.net MVC上显示树形菜单和管理操作. Easyui-treegrid的使用方法 首先我们来看一下treegrid的基本使用方法.很简单,和easyui-datagrid差不多. <table title="Folder Browser" class=&qu

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

前言 这一篇我们将完成系统的权限设置功能以及不同角色用户登录系统后动态加载菜单.注意:此示例权限只针对菜单级,如果园友需要更复杂的系统权限设置,可以拓展到按钮级或属性级. 用户的登录采用Form认证来实现,这样可以有效地防止非授权用户或页面链接对系统造成不安全的操作. 权限设置模块 页面采用角色列表和菜单列表勾选的方式,即选择角色后勾选可以操作的菜单,这样具有才角色的用户就具有操作这些菜单的权限.界面设置如下: 界面选择的roleID和menuID我们采用字符串的方式进行拼接.在controll

[置顶]基于MVC4+EasyUI的Web开发框架经验总结(6)在页面中应用下拉列表的处理(转载)

[置顶]基于MVC4+EasyUI的Web开发框架经验总结(6)在页面中应用下拉列表的处理 在很多Web界面中,我们都可以看到很多下拉列表的元素,有些是固定的,有些是动态的:有些是字典内容,有些是其他表里面的名称字段:有时候引用的是外键ID,有时候引用的是名称文本内容:正确快速使用下拉列表的处理,可以提高我们程序界面的美观性和友好型,本文主要介绍在我的Web开发框架以及相关的扩展Web应用中用到的一些代表性下拉列表的处理场景,希望给大家做个参考学习. 1.固定下拉列表的处理 代表性的固定列表有人