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

    技术2026-04-01  2

    一,摘要

    在上一篇文章(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; 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: 

    四,总结

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

    最新回复(0)