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 ...
随机推荐
- 0.[WP Developer体验Andriod开发]之从零安装配置Android Studio并编写第一个Android App
0. 所需的安装文件 笔者做了几年WP,近来对Android有点兴趣,尝试一下Android开发,废话不多说,直接进入主题,先安装开发环境,笔者的系统环境为windows8.1&x64. 安装 ...
- MySql.Data.dll 不支持输出参数
insert INTO stu(name) VALUES('maimai'); set @ReturnValue=@@IDENTITY; string sql="insert INTO st ...
- informix(懒得通用)
1.create view 444(...) as select ...from... 2.insert into select.......union select 不支持 请分开写 ...
- Learning by doing
Learning by doing 绪论:读了娄老师的公众号中--<做中学(Learning By Doing)>这篇文章后,深有感触,我想到很多自己之前的事情,很多都是每每想的很好,总是 ...
- http websocket
套接字 http 协议 tcp/ip协议 服务器端口 网络协议 http://wenku.it168.com/d_001406013.shtml 跨源 AJAX 事件驱动 http://www.lin ...
- 一步一步安装UEFI分区方式的windows 10 企业版
发现很多坛友不会安装UEFI分区的windows 10 从启动设置,到分区,到最后的引导与激活都是很大的问题. 在我看来这是最不容易出错的安装方式适合于刚刚上手的菜鸟,自己按照图片一步一步的就可以安装 ...
- 字符串处理总结之二(C#StringBuilder类)
动态串StringBuilder 与String类相比,System.Text.StringBuilder类可以实现动态字符串.此外,动态的含义是指在修改字符串时,系统不需要创建新的对象,不会重复开辟 ...
- ElasticSearch与Spring Boot集成问题
1.None of the configured nodes are available 或者 org.elasticsearch.transport.RemoteTransportException ...
- Linux解读
Linux中权限(r.w.x)对于目录与文件的意义 一.权限对于目录的意义 1.首先要明白的是目录主要的内容是记录文件名列表和子目录列表,而不是实际存放数据的地方. 2.r权限:拥有此权限表示可以读取 ...
- Openstack+Kubernetes+Docker微服务实践之路--RPC
重点来了,本文全面阐述一下我们的RPC是怎么实现并如何使用的,跟Kubernetes和Openstack怎么结合. 在选型一文中说到我们选定的RPC框架是Apache Thrift,它的用法是在Ma ...