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

本文介绍如何使用ASP.NET MVC3及EF CodeFirst CTP5构建应用程序,并通过创建开销(Expense)实体类来演示CRUD操作。进一步探讨领域实体、服务层和服务接口的实现,以封装业务逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,摘要

在上一篇文章(http://blog.youkuaiyun.com/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;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5: using MyFinance.Domain;
   6: using MyFinance.Data.Infrastructure;
   7:  
   8: namespace MyFinance.Data
   9: {
  10:     public class ExpenseRepository : RepositoryBase<Expense>, IExpenseRepository
  11:         {
  12:         public ExpenseRepository(IDatabaseFactory databaseFactory)
  13:             : base(databaseFactory)
  14:             {
  15:             }           
  16:         }
  17:     public interface IExpenseRepository : IRepository<Expense>
  18:     {
  19:     }
  20: }


三,建立服务层

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

   1: using System;
   2: using System.Collections.Generic;
   3: using System.Linq;
   4: using System.Text;
   5: using MVC3DIApplication.Domain;
   6: using MVC3DIApplication.Data.Infrastructure;
   7: using MVC3DIApplication.Data;
   8:  
   9: namespace MVC3DIApplication.Service
  10: {
  11:     //接口
  12:      public interface IExpenseService
  13:     {
  14:         IEnumerable
   
     GetExpenses(DateTime startDate, DateTime ednDate);
   
  15:         Expense GetExpense(int id);        
  16:         void CreateExpense(Expense expense);
  17:         void DeleteExpense(int id);
  18:         void SaveExpense();
  19:     }
  20:     //实现接口
  21:     public class ExpenseService : IExpenseService
  22:     {
  23:         private readonly IExpenseRepository expenseRepository;       
  24:         private readonly IUnitOfWork unitOfWork;
  25:         public ExpenseService(IExpenseRepository expenseRepository, IUnitOfWork unitOfWork)
  26:         {         
  27:             this.expenseRepository = expenseRepository;
  28:             this.unitOfWork = unitOfWork;
  29:         }
  30:         public IEnumerable
   
     GetExpenses(DateTime startDate, DateTime endDate)
   
  31:         {
  32:             //由于进行了依赖注入,所以不需要手动new,直接使用上面expenseRepository调用即可;
  33:             var expenses = expenseRepository.GetMany(exp => exp.Date >= startDate && exp.Date <= endDate);
  34:             return expenses;
  35:         }
  36:         public void CreateExpense(Expense expense)
  37:         {
  38:             expenseRepository.Add(expense);
  39:             unitOfWork.Commit();
  40:         }
  41:         public Expense GetExpense(int id)
  42:         {
  43:             var expense = expenseRepository.GetById(id);
  44:             return expense;
  45:         }
  46:         public void DeleteExpense(int id)
  47:         {
  48:             var expense = expenseRepository.GetById(id);
  49:             expenseRepository.Delete(expense);
  50:             unitOfWork.Commit();
  51:         }
  52:         public void SaveExpense()
  53:         {
  54:             unitOfWork.Commit();
  55:         }
  56:     }
  57: }
  58:  
  59:  

四,总结

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值