一,摘要
在上一篇文章(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; <!--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-->
四,总结
通过这两篇文章我相信读者朋友能过掌握该结构的使用,由于时间关系我就要把要点写了下,源代码稍后以留言的形式提供,谢谢您的访问!
8138

被折叠的 条评论
为什么被折叠?



