`
kanwoerzi
  • 浏览: 1645225 次
文章分类
社区版块
存档分类
最新评论

一步一步学习ASP.NET MVC3 &EF Code First CTP 5&DI(二)

 
阅读更多

一,摘要

在上一篇文章(http://blog.csdn.net/suzhi921/archive/2011/02/16/6188768.aspx)中,我们讨论了如何应用MVC3以及Code First建立应用程序,以及应用域实体创建了CRUD的操作,在本篇文章我们将更进一步讨论领域实体,服务层,以及View Models,完成我们Web应用程序剩余的部分.使用的工具如下:

1.ASP.NET MVC 3
2.EF Code First CTP5
3.Unity2.0

二,创建Expense类的Repository

由于所有的CRUD操作封装在Base类里,所以只需继承基类就可以完成CRUD操作:
ExpenseRepository.cs:

   1: using System;
<!--CRLF-->
   2: using System.Collections.Generic;
<!--CRLF-->
   3: using System.Linq;
<!--CRLF-->
   4: using System.Text;
<!--CRLF-->
   5: using MyFinance.Domain;
<!--CRLF-->
   6: using MyFinance.Data.Infrastructure;
<!--CRLF-->
   7: 
<!--CRLF-->
   8: namespace MyFinance.Data
<!--CRLF-->
   9: {
<!--CRLF-->
  10:     public class ExpenseRepository : RepositoryBaseExpense>, IExpenseRepository
<!--CRLF-->
  11:         {
<!--CRLF-->
  12:         public ExpenseRepository(IDatabaseFactory databaseFactory)
<!--CRLF-->
  13:             : base(databaseFactory)
<!--CRLF-->
  14:             {
<!--CRLF-->
  15:             }           
<!--CRLF-->
  16:         }
<!--CRLF-->
  17:     public interface IExpenseRepository : IRepositoryExpense>
<!--CRLF-->
  18:     {
<!--CRLF-->
  19:     }
<!--CRLF-->
  20: }
<!--CRLF-->


三,建立服务层

由于控制器不适合进行大量的业务逻辑处理,所以服务层封装所有的业务逻辑,进行调用即可.下面创建Expense的服务层:

   1: using System;
<!--CRLF-->
   2: using System.Collections.Generic;
<!--CRLF-->
   3: using System.Linq;
<!--CRLF-->
   4: using System.Text;
<!--CRLF-->
   5: using MVC3DIApplication.Domain;
<!--CRLF-->
   6: using MVC3DIApplication.Data.Infrastructure;
<!--CRLF-->
   7: using MVC3DIApplication.Data;
<!--CRLF-->
   8: 
<!--CRLF-->
   9: namespace MVC3DIApplication.Service
<!--CRLF-->
  10: {
<!--CRLF-->
  11:     //接口
<!--CRLF-->
  12:      public interface IExpenseService
<!--CRLF-->
  13:     {
<!--CRLF-->
  14:         IEnumerable<expense> GetExpenses(DateTime startDate, DateTime ednDate);</expense>
<!--CRLF-->
  15:         Expense GetExpense(int id);        
<!--CRLF-->
  16:         void CreateExpense(Expense expense);
<!--CRLF-->
  17:         void DeleteExpense(int id);
<!--CRLF-->
  18:         void SaveExpense();
<!--CRLF-->
  19:     }
<!--CRLF-->
  20:     //实现接口
<!--CRLF-->
  21:     public class ExpenseService : IExpenseService
<!--CRLF-->
  22:     {
<!--CRLF-->
  23:         private readonly IExpenseRepository expenseRepository;       
<!--CRLF-->
  24:         private readonly IUnitOfWork unitOfWork;
<!--CRLF-->
  25:         public ExpenseService(IExpenseRepository expenseRepository, IUnitOfWork unitOfWork)
<!--CRLF-->
  26:         {         
<!--CRLF-->
  27:             this.expenseRepository = expenseRepository;
<!--CRLF-->
  28:             this.unitOfWork = unitOfWork;
<!--CRLF-->
  29:         }
<!--CRLF-->
  30:         public IEnumerable<expense> GetExpenses(DateTime startDate, DateTime endDate)</expense>
<!--CRLF-->
  31:         {
<!--CRLF-->
  32:             //由于进行了依赖注入,所以不需要手动new,直接使用上面expenseRepository调用即可;
<!--CRLF-->
  33:             var expenses = expenseRepository.GetMany(exp => exp.Date >= startDate && exp.Date 
<!--CRLF-->

    
  34:             return expenses;
<!--CRLF-->
  35:         }
<!--CRLF-->
  36:         public void CreateExpense(Expense expense)
<!--CRLF-->
  37:         {
<!--CRLF-->
  38:             expenseRepository.Add(expense);
<!--CRLF-->
  39:             unitOfWork.Commit();
<!--CRLF-->
  40:         }
<!--CRLF-->
  41:         public Expense GetExpense(int id)
<!--CRLF-->
  42:         {
<!--CRLF-->
  43:             var expense = expenseRepository.GetById(id);
<!--CRLF-->
  44:             return expense;
<!--CRLF-->
  45:         }
<!--CRLF-->
  46:         public void DeleteExpense(int id)
<!--CRLF-->
  47:         {
<!--CRLF-->
  48:             var expense = expenseRepository.GetById(id);
<!--CRLF-->
  49:             expenseRepository.Delete(expense);
<!--CRLF-->
  50:             unitOfWork.Commit();
<!--CRLF-->
  51:         }
<!--CRLF-->
  52:         public void SaveExpense()
<!--CRLF-->
  53:         {
<!--CRLF-->
  54:             unitOfWork.Commit();
<!--CRLF-->
  55:         }
<!--CRLF-->
  56:     }
<!--CRLF-->
  57: }
<!--CRLF-->
  58: 
<!--CRLF-->
  59: 
<!--CRLF-->

四,总结

通过这两篇文章我相信读者朋友能过掌握该结构的使用,由于时间关系我就要把要点写了下,源代码稍后以留言的形式提供,谢谢您的访问!

分享到:
评论

相关推荐

    上期CTP行情交易接口.Net封装 20121028

    上期技术CTP行情及交易接口.Net封装 本次更新到CTP官方库20120530版本,增加了Multiple AppDomain支持

    CTP.Net_C#_c#metagen_ctp_

    C# .net 的开发源文件,可以给大家做为一个参考

    上期技术CTP行情交易接口.Net封装完整版

    上期技术CTP行情交易接口.Net封装完整版 CTP.dll 将非托管C++库转换为托管库,供.Net程序调用。包括行情接口和交易接口。 Struct.h头文件修改自海风版C#的Struct.cs文件,非常感谢! CSharpMdTest C#行情接口测试...

    asp.net AJAX安装组件

    ASPAJAXTP.msi ASP.NET AJAX Futures January CTP ASPAJAXSamples ASP.NET AJAX Samples AjaxControlToolkit.zip AJAX Control Toolkit,需自己编译 Validators.zip是在Bet1a,Beta2,RC中自带但在Relase中被移到...

    ASP.NET2.0 AJAX

    ASP.NET2.0 AJAX包括:ASP.NET 2.0 AJAX Extensions和ASP.NET Futures CTP.放心下载可用! 支持vs2005sp1!不要用vs2005的哟!否则web.config中会出现错误的!

    asp.net ajax 安装包

    asp.net ajax 安装包,Extensions、CTP版、Contrtoolkit全都有!!! 支持.net framwork 2.0!

    ASP.NET2.0 AJAX开发组件包

    ASPAJAXTP.msi ASP.NET AJAX Futures January CTP ASPAJAXSamples ASP.NET AJAX Samples AjaxControlToolkit.zip AJAX Control Toolkit,需自己编译 Validators.zip是在Bet1a,Beta2,RC中自带但在Relase中被移到...

    ASP.NET AJAX

    ASP.NET AJAX入门系列(5):使用UpdatePanel控件(二) 导读:UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,...

    CTP.rar_14N_ctp_ctp.net_上期 ctp_上期技术ctp

    c#封装上期技术ctp接口,很好用,可以用于开发自己的交易系统

    ASP.NET AJAX框架安装包

    ASP.NET AJAX框架安装包,包括ASP.NET 2.0 AJAX Extensions 以及 ASP.NET AJAX Futures CTP 包,在VS2005上安装这两个包后可以获得丰富的服务器端控件。

    Asp.net Wcf学习(通用)

    目前最新的WCF版本是February 2006 CTP,下载页面是:http://www.microsoft.com/downloads/details.aspx?FamilyId=F51C4D96-9AEA-474F-86D3-172BFA3B828B&displaylang=en。使用WCF需要用到一些相关的工具,如SvcUtil...

    解读ASP.NET 5 & MVC6系列教程(2):初识项目

    我们可以看到,此时Web Forms\MVC\Web API复选框都选择不了,原有是因为在ASP.NET 5中做了大量更改,移除了Web Forms功能,将MVC、Web API、Web Pages这些功能合在了一起,所以自然就不需要这些复选框了。...

    LumaQQ.NET_CTP2.rar_CTP2.r

    CSharp 写的QQ客户端程序\是学习研究的不可缺少的好东西

    上期所的CTP行情及交易接口使用.Net封装

    上期所的CTP行情及交易接口使用.Net封装 本次更新为CTP官方20120530版本,并且增加了Multiple AppDomain支持

    Beginning ASP.NET 2.0 AJAX.pdf

    .279 Chapter 13: ASP.NET AJAX Futures CTP: Online Content. . . . . . . . . . . . . . . 319 Appendix: Resources. . . . . . . . . . . . . . . 325 Index. . . . . . . . . . . . . . . . . . . . ....

    CTP.Net 是一个将上期技术的CTP C++库转换为托管库.zip

    CTP.Net 是一个将上期技术的CTP C++库转换为托管库,供.Net程序调用的项目。 目前支持期货、证券和期权接口。 软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言...

    CTP API接口封装(收录3个版本)

    收录3个版本的CTP API接口封装 1.直接C++调用版2.Visual C++.net封装C#调用版3.海风C++封装公开dll接口C#调用版

    银行开发框架 规范 ctp

    本文档仅仅是对《CTP开发手册》的补充,对于下面将要描述的每一个点,在《CTP开发手册》中都有详细的描述。这里把他们提出来再做说明,仅仅因为这些点是CTP开发中的关键,以提醒用户注意。 CTP作为一个B/S应用系统...

    \ASP.NET AJAX Beta2.0

    ASP.NET AJAX Beta2.0控件 没有安装ASPAJAXExtSetup.rar时,ASPAJAXExtBeta2Setup此版不能安装 ASPAJAXBeta2CTP.rar(没有安装ASPAJAXExtBeta2Setup.rar时,此版不能安装) ASPAJAXBeta2Samples.rar(这是官方提供的...

Global site tag (gtag.js) - Google Analytics