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("", , , 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
点此查看链接地址
EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(完)的更多相关文章
- EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(一)
前言 本系列源自对EF6 CodeFirst的探索,但后来发现在自己项目中构建的时候遇到了一些问题以及一些解决方法,因此想作为一个系列写下来. 本系列并不是教你怎么做架构设计,但可以参照一下里面的方法 ...
- EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(六)
前言 在接下来的篇幅里将对系统的模块功能进行编写.主要以代码实现为主.这一篇我们需要完成系统模块“角色管理”的相关功能.完成后可以对系统框架结构有进一步了解. Abstract层 之前说过,Abstr ...
- EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(三)
前言 在上一篇中,我们依靠着EasyUI强大的前端布局特性把前端登录界面和主界面给搭建完成了.这一篇我们就要尝试着把整个解决方案部署到云端呢,也就是Visual Studio Online(TFVC) ...
- EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(二)
前言 写完第一篇后,我一直在想接下来应该从哪一方面开始讲.后来我觉得不用那么死板的把每一个课程和大纲都列出来吧,毕竟我又不是教书的,呵呵...我觉得就像做实验一样,我们一部分一部分的完成,最后总个结果 ...
- EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(八)
前言 本篇幅将对系统的菜单管理模块进行说明,系统的菜单采用树形结构,这样可以更好地方便层级设计和查看.本示例将说明如何通过EntityFramework读取递归的菜单树形结构,以及结合EasyUI的t ...
- EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(七)
前言 上一篇文章我们完成了系统角色管理的基本功能实现,也对系统层次结构进行了了解.这一篇我们将继续对系统的用户管理模块进行代码编写.代码没有做封装,所以大部分的逻辑代码都是相通的,只是在一些前端的细节 ...
- EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(四)
前言 这一篇,我们终于到了讲解Entity Framework CodeFirst 的时刻了,首先创建实体对象模型,然后会通过配置Fluent API的方式来对实体对象模型进行完整的数据库映射操作. ...
- EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(九)
前言 这一篇我们将完成系统的权限设置功能以及不同角色用户登录系统后动态加载菜单.注意:此示例权限只针对菜单级,如果园友需要更复杂的系统权限设置,可以拓展到按钮级或属性级. 用户的登录采用Form认证来 ...
- EF6 CodeFirst+Repository+Ninject+MVC4+EasyUI实践(五)
前言 在编写代码的时候,我遇到了很多关于EntityFramework6的疑问,所以现在就提前把这些问题列出来做一下解答,以便在以后的代码编写过程中减少不必要的Bug. EntityFramework ...
随机推荐
- 工作队列(workqueue) create_workqueue/schedule_work/queue_work
--- 项目需要,在驱动模块里用内核计时器timer_list实现了一个状态机.郁闷的是,运行时总报错"Scheduling while atomic",网上搜了一下:" ...
- (转)深入浅出 妙用Javascript中apply、call、bind
原文连接 深入浅出 妙用Javascript中apply.call.bind 网上文章虽多,大多复制粘贴,且晦涩难懂,我希望能够通过这篇文章,能够清晰的提升对apply.call.bind的认识,并且 ...
- Unity2D 里的场景缩放实现
闲时以 Unity2D 练手时想实现端游里的场景缩放功能,而网上的代码几乎全是 3D 场景缩放相关,所以我自己编写了个 2D 场景缩放脚本(C#). 代码如下: using UnityEngine; ...
- 简单介绍一下R中的几种统计分布及常用模型
统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...
- python 拾贝
1. 内建的 type() 函数带三个参数时, 将作为强悍的动态类构造器. 如下: type(name, bases, dict) 返回一个新的type对象. 基本上是 class 语句的动态形式 ...
- Python虚拟开发环境
最近,一直在不同版本的Python之间来回折腾,发现了几个Python虚拟开发环境工具,具体如下: 1. Virtualenv,可以指定开发环境的Python版本.继承已有开发环境配置,virtual ...
- c++实现简单的链表
注:我是一个编程菜鸟,哪个大神看出来缺陷提点一下,感激不尽. 链表由一个个的节点串联而成,同一由first头指针管理,属于线性表中相比于数组,添加删除方便,但访问又有点慢的数据结构. 第一步:节点 N ...
- js创建节点及其属性
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- PCA9554
参考资料: 1. Texas Instruments PCA9554简介 2. PCA9554文档下载 3. PCA9554 Data Sheet 知识点: ● PCA9554是具有中断输出和配置寄存 ...
- jQuery get() 函数
get() 函数 用于获取当前jQueryobject对象所匹配的DOM元素 语法 jQueryobject.get(index)//因为在JQuery中.很多时候和[]等价所以jQueryobjec ...